代码更新,缘由之前是缩略图,一直问怎么爬取原图,索性代码写在下面,莫嫌弃low。

想分享源码的原因就是发现网上有关于Google图片的抓取竟然很少很少有介绍,而且有一个分享的代码竟然还加密收钱mmp,很看不惯索性自己写一个共享出来当然代码可能会有点low就不要在意了。废话不多说上代码。

  1. 准备工作1:
    Chromedriver的安装对应版本介绍参考网站如下:
https://blog.csdn.net/yoyocat915/article/details/80580066   # 参考版本【转载yoyocat915】
http://chromedriver.storage.googleapis.com/index.html  # 对应版本下载

因为之前的工作一直没有selenium,今天索性用用
2. 准备工作2:
外网的准备,如果你本公司有的话就不用买了,如果没有想要科学上网这里打一波广告可去这个网站购买

https://g.2333.tn/  #购买的过程在这里就不介绍了

买过来后进行调试在这里作者就被公司的外网给坑了不少直接提出来坑在那防止你被坑

第一步:首先调试为全局模式,不然仅仅就Google能进行访问外网这样你是无法用其他浏览器访问外网的(个人理解)

第二步:查看自己所用的端口


ok到这边几步已经可以开始编码了,那么便进行分析怎么使用selenium+chrome来实现图片的抓取了。分享代码如下如果你selenium使用不太熟练,基础教程这边也不分享了,因为我也在学习过程中。代码流程分享如下:
在这之前介绍一个图片储存的用法:

urllib.request.urlretrieve(图片的路径.jpg结尾\图片的base64编码,‘储存的位置)
可以参考博客:https://blog.csdn.net/wuguangbin1230/article/details/77680058

好了上最初的代码版本1.0

import os
import time
import urllib
from scrapy import Selector
from selenium import webdriverclass GoogleImgCrawl:def __init__(self):self.browser = webdriver.Chrome('F:\MyDownloads\chromedriver.exe')self.browser.maximize_window()self.key_world = input('Please input the content of the picture you want to grab >:')self.img_path = r'D:\GoogleImgDownLoad'  # 下载到的本地目录if not os.path.exists(self.img_path):  # 路径不存在时创建一个os.makedirs(self.img_path)def start_crawl(self):self.browser.get('https://www.google.com/search?q=%s' % self.key_world)self.browser.implicitly_wait(3)  # 隐形等待时间self.browser.find_element_by_xpath('//a[@class="iu-card-header"]').click()  # 找到图片的链接点击进去time.sleep(3)  # 休眠3秒使其加载完毕img_source = self.browser.page_sourceimg_source = Selector(text=img_source)self.img_down(img_source)  # 第一次下载图片self.slide_down()  # 向下滑动继续加载图片def slide_down(self):for i in range(7, 20):  # 自己可以任意设置pos = i * 500  # 每次向下滑动500js = "document.documentElement.scrollTop=%s" % posself.browser.execute_script(js)time.sleep(3)img_source = Selector(text=self.browser.page_source)self.img_down(img_source)def img_down(self, img_source):img_url_list = img_source.xpath('//div[@class="THL2l"]/../img/@src').extract()for each_url in img_url_list:if 'https' not in each_url: #仅仅就第一页可以,其他误判这个代码不是完整的是作者的错代码。# print(each_url)each_img_source = urllib.request.urlretrieve(each_url,'%s/%s.jpg' % (self.img_path, time.time()))  # 储存图片if __name__ == '__main__':google_img = GoogleImgCrawl()google_img.start_crawl()

在这里所遇到的坑如下截图:
截图一:

前20张图片的src显示的是base64编码呀这样就直接可以用上边的代码进行解决了呀可是你们看后边的图片src是什么?如下图

在这里既不是base64也不是以.jpg结尾的我去这怎么保存呢?难道使用

 self.browser.get(图片的地址)img_source = self.browser.page_source

通过这个继续拿吗?如果你这样想就错了,因为我们拿到的还是完完整整的页面呀,所以这个时候怎么办呀?想到我们最初的使用requests请求图片地址呀,这个时候作者便索性试了一下取出单独的图片src进行请求如果不加代理是肯定错了。所以加上代理如下结果:

import time
import requestsproxy = {"https": "https://127.0.0.1:8787"}  //端口作者在前边的坑已经介绍了需要外网的端口
response = requests.get('https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTwwkW09Hrnq5DOzSYAKqrxv3uGjbQzoCRP28AOF03pzJ2uFObS',proxies=proxy, verify=False)
with open('./image%s.jpg' % time.time(), 'wb')as f:f.write(response.content)

结果就是拿到了想要的结果

这样你知道该怎样修改上边的代码了吗?哈哈哈可能有点乱呀
修改代码如下:

import os
import time
import urllib
import requests
from scrapy import Selector
from selenium import webdriverclass GoogleImgCrawl:def __init__(self):self.proxy = {"https": "https://127.0.0.1:8787"} #初始化代理self.browser = webdriver.Chrome('F:\MyDownloads\chromedriver.exe')self.browser.maximize_window() #最大的适应屏幕self.key_world = input('Please input the content of the picture you want to grab >:')self.img_path = r'D:\GoogleImgDownLoad'  # 下载到的本地目录if not os.path.exists(self.img_path):  # 路径不存在时创建一个os.makedirs(self.img_path)def start_crawl(self):self.browser.get('https://www.google.com/search?q=%s' % self.key_world)self.browser.implicitly_wait(3)  # 隐形等待时间self.browser.find_element_by_xpath('//a[@class="iu-card-header"]').click()  # 找到图片的链接点击进去time.sleep(3)  # 休眠3秒使其加载完毕img_source = self.browser.page_sourceimg_source = Selector(text=img_source)self.img_down(img_source)  # 第一次下载图片self.slide_down()  # 向下滑动继续加载图片def slide_down(self):for i in range(7, 20):  # 自己可以任意设置pos = i * 500  # 每次向下滑动500js = "document.documentElement.scrollTop=%s" % posself.browser.execute_script(js)time.sleep(3)img_source = Selector(text=self.browser.page_source)self.img_down(img_source)def img_down(self, img_source):img_url_list = img_source.xpath('//div[@class="THL2l"]/../img/@src').extract()for each_url in img_url_list:if 'https' not in each_url:# print(each_url)each_img_source = urllib.request.urlretrieve(each_url,'%s/%s.jpg' % (self.img_path, time.time()))  # 储存图片else: #在这里添加一个不久行了吗?如果图片的链接不是base64的 response = requests.get(each_url,proxies=self.proxy, verify=False)with open('D:\GoogleImgDownLoad\%s.jpg' % time.time(), 'wb')as f:f.write(response.content)if __name__ == '__main__':google_img = GoogleImgCrawl()google_img.start_crawl()

以上就是分享结束,当然直接使用requests模块+代理,也是比较方便的。百度的爬虫这边就不做分享了想要源码的联系作者分享个给你。当然美中不足的是图片的去重这边还么有做,也很简单的不知道你有没有想到思路反正作者这边是有思路咯。已经深夜了洗洗睡吧哈。

更新代码,原图获取…2019/1/21

import os
import time
import requests
from scrapy import Selector
from selenium import webdriver
from google_img.bloom_filter import *class GoogleImgCrawl:def __init__(self):"""初始化一些变量"""self.bf = BloomFilter()  # 初始布隆过滤器self.browser = webdriver.Chrome('G:\ChromDownLoad\chromedriver.exe')self.browser.maximize_window()self.proxy = {"https": "https://127.0.0.1:1080"}  # 初始化代理self.key_world = input('Please input the content of the picture you want to grab >:')self.img_path = r'D:\Image\GoogleImgDownLoad\dog'  # 下载到的本地目录if not os.path.exists(self.img_path):  # 路径不存在时创建一个os.makedirs(self.img_path)def start_crawl(self):"""抓取首页的内容:return:"""self.browser.get('https://www.google.com/search?q=%s' % self.key_world)self.browser.implicitly_wait(3)  # 隐形等待时间self.browser.find_element_by_xpath('//a[contains(text(),"图片")]').click()  # 找到图片的链接点击进去time.sleep(1)  # 休眠3秒使其加载完毕img_source = self.browser.page_sourceimg_source = Selector(text=img_source)self.img_down(img_source)  # 第一次下载图片self.slide_down()  # 向下滑动继续加载图片def slide_down(self):"""向下滑动抓取,每次滑动1000高度:return:"""for i in range(7, 100):  # 自己可以任意设置pos = i * 800  # 每次向下滑动800js = "document.documentElement.scrollTop=%s" % posself.browser.execute_script(js)time.sleep(3)if int(i) == 20:print(self.browser.page_source)img_source = Selector(text=self.browser.page_source)try:self.img_down(img_source)except BaseException as e:print(e)def img_down(self, img_source):"""图片的下载功能:param img_source: 获取响应的内容:return:"""img_url_list = img_source.xpath('//a[@jsname="hSRGPd"]/@href').extract()for each_url in img_url_list:if '#' not in each_url:each_url = 'https://www.google.com' + each_urlif self.bf.isContains(each_url):print('this %s url is exists!' % each_url)continueelse:try:self.bf.insert(each_url)except BaseException as e:print('已经存在......')else:try:response = requests.get(each_url, proxies=self.proxy, verify=False, timeout=3)  # 请求大图的网址except BaseException as e:print(e)else:img_info = Selector(text=response.content)img_url = img_info.xpath('//div[@id="il_ic"]/img/@src').extract_first()  # 获取图片的网址try:response = requests.get(img_url, proxies=self.proxy, verify=False, timeout=3)except BaseException as e:print(e)else:print('正在下载中................')with open('%s/%s.jpg' % (self.img_path, time.time()), 'wb')as f:f.write(response.content)if __name__ == '__main__':google_img = GoogleImgCrawl()google_img.start_crawl()

不明白的继续讨论,有更好的方法欢迎分享一起进步,代码有错误的地方请指出。

Python+selenium+Chromedriver+代理爬取Google图片相关推荐

  1. python + selenium +pyquery 爬虫 爬取 1688详情图片 阿里巴巴详情图片 与标题 下载图片并进行压缩

    python + selenium +pyquery 爬虫  爬取 1688详情图片 阿里巴巴详情图片 与标题 下载图片并进行压缩 用到的库和源码下载地址 需要用到chromedriver  包含wi ...

  2. 利用python的scrapy框架爬取google搜索结果页面内容

    scrapy google search 实验目的 爬虫实习的项目1,利用python的scrapy框架爬取google搜索结果页面内容. https://github.com/1012598167/ ...

  3. Python学习笔记:爬取网页图片

    Python学习笔记:爬取网页图片 上次我们利用requests与BeautifulSoup爬取了豆瓣<下町火箭>短评,这次我们来学习爬取网页图片. 比如想爬取下面这张网页的所有图片.网址 ...

  4. 使用python和PyQt5编写爬取百度图片的界面工具

    使用python和PyQt5编写爬取百度图片的界面工具 本篇文章的主要内容是展示我个人编写的,以界面小工具的方式爬取百度上面的图片,功能很单一,根据关键词爬取图片,代码很简单,新手上路请多指教. 代码 ...

  5. Python爬虫实战 | (9) 爬取搜狗图片

    本篇博客我们将爬取百度图片,输入搜索词,爬取与搜索词相关的图片. 首先打开搜狗图片https://pic.sogou.com/,比如搜索"猫",此时的URL如下: https:// ...

  6. 基于python+selenium+Chrome自动化爬取巨潮资讯网A股财务报表

    转自同学的博客 引言: 网页爬虫分为静态网页爬虫和动态网页爬虫,前者是指索要获取的网页内容不需要经过js运算或者人工交互, 后者是指获取的内容必须要经过js运算或者人工交互.这里的js运算可能是aja ...

  7. Python selenium练习:爬取京东商品搜索结果

    Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作(具体的配置或使用可以百度).我用的谷歌浏览器,先在镜像下载谷歌浏览器版本对应的驱动版本https://npm.taobao.o ...

  8. python +selenium+phantomjs 登录爬取新浪微博动态js页面

    登录新浪微博 最近新浪微博好烦,都取消不了验证码这个难搞得东西,而且跳来跳去,一改版以前的代码就都不能用了.目前整理的资料有三种方法: 1. 设Cookie:简单粗暴,免去了模拟登录的好多麻烦,只是要 ...

  9. python自动化办公之爬取HTML图片写入PPT实战

    python自动化办公之批量图片导入PPT 昨天,大Boss找到一个网页,觉得里面的图片内容特别好,想把它下载下来作为学习资料,整理整理教导下属.但是,手动一张一张的保存图片太慢了,问我可不可以下载下 ...

最新文章

  1. 恢复Linux误删除文件系列之scalpel工具
  2. #脱贫攻坚#彭蕾卸任蚂蚁金服后首次现身:女性脱贫亮三招
  3. LeetCode Remove Linked List Elements
  4. freemarker写入word【未完,待续】
  5. 分享一个学习git的图形化学习网站-Learn Git Branching参考答案整理
  6. 理论基础 —— 队列
  7. 长庆企业信息化管理课件_会博通浅谈企业档案管理信息化的必要性和优势
  8. 力扣90. 子集 II(JavaScript)
  9. 从二进制格雷码到任意进制格雷码(1)
  10. 怎样使计算机桌面有励志壁纸,适合电脑的高清励志桌面壁纸
  11. 使命召唤4:现代战争
  12. mtk 软件下载过程
  13. Koo叔说Shader—果冻效果
  14. 计算 m 的 n 次幂
  15. 七、ref引用与数组的常用方法
  16. arduino 步进电机驱动库_Arduino驱动 步进电机
  17. 1000卡路里计算器_Excel卡路里燃烧计算器
  18. 入职快手半年工作小结
  19. 攻防世界 misc 高手区 Miscellaneous-300
  20. 国外客户最讨厌的开发信

热门文章

  1. Android软件去广告教程
  2. PAGER set to stdout_今早10点有好货,to*my原单男士两面穿棉衣,碧入优衣库原单格子衬衫,C*加厚大毛领毛呢大衣,L*E原单童装卫裤,三*原单马甲...
  3. web.xml引入web-app dtd约束
  4. A*算法简介-matlab篇
  5. 关于考研数学不错的笔记
  6. 博通第二季净利润37.33亿美元,同比增长700%
  7. python基于PHP+MySQL的小区物业管理系统
  8. EasyAPS知识专栏|提前期的概念及其缩短方法
  9. 不识庐山真面目,只缘身在此山中!
  10. C#语言实例源码系列-实现在图片上绘制文字