Google 图片爬虫

标签: python 爬虫 python 爬虫 | 发表时间:2017-09-23 03:08 | 作者:
出处:http://wulc.github.io/

这里的 Google 图片爬虫指的是爬取在 Google 上通过关键词搜索得到的图片,由于最近需要一些特定领域的图片,而且现有的数据库满足不了要求,因此就想通过 Google 搜索筛选出这些特定领域的图片,然后下载下来后再进行人工筛选。这里采用了两种方法,区别在于是否需要解析网页端的 JS 代码。该项目的代码已经放到了 Github 上,详细代码参见 这里

整体的思路就是先获取 Google 搜索结果页面的 html 代码,然后从中提取出图片的真实 URL,因为实际上 Google 也是通过爬虫来爬取这些图片的地址以及根据描述归类,所以图片并不存储在 Google 的服务器中。

这个过程中的一个关键点就是通过关键词 search_query 搜索得到的页面可直接通过下面这个 url 访问

https://www.google.com/search?q=search_query&source=lnms&tbm=isch

search_query 换成需要搜索的关键词即可。

这样便可以直接获取这个页面的源码,然后通过正则表达式解析出所有的图片的链接,这个方法只需要 python 的 urllib 库即可,对应的源码文件为 download_with_urllib.py

上面是第一种方法,这种方法比较简单,当时有一个问题就是每个关键词最多只能下载 100 张图片,原因是 访问上面的链接返回的 HTTP Response 中限制了最多只有前100张图片的URL,如果需要显示更多,则需要在解析页面中相应的 JS 代码,这就是接下来要介绍的第二种方法。

所谓解析 JS 代码,其实就是浏览器的滚动条向下滚动时,浏览器引擎解析了页面的 JS 代码,从而向 Google 的服务器发出新的请求,从而返回更多的图片,当向下滚动时到底时,会出现一个显示为 Show more results需要点击的按钮,只有点击后才能加载更多的图片,这些操作要通过浏览器完成,而 python 提供了一个 selenium 库,这个库通过相应的浏览器驱动来启动浏览器(不同的浏览器对应于不同的驱动),并在代码中制定具体的浏览器操作。

这里采用的是 FireFox 浏览器,对应的驱动为 geckodriver,具体的安装步骤就是先安装 FireFox 浏览器,然后 在这里下载与浏览器版本相应的 geckodriver,并且在环境变量 PATH 中添加 geckodriver 的路径。

第二种方法对应的源码文件为 download_with_selenium.py

第二种方法的源码中主要有两个方法: get_image_links和,,第一个方法是获取所有图片链接并写入到文件中,第二个方法则是下载第一个方法获取的文件中的图片;在测试时,第二个方法常常会卡住,原因可能是网络的不稳定,也可能是图片服务器那边的反爬虫机制,代码中没有捕获到 Exception, 因此后面对第二个方法进行了改进,并将新的方法写到文件 download_images_with_time_limit.py

新的方法主要是限制 HTTP 请求的最大耗时,超过这个时间就会抛出异常,实现是通过系统的 signal 来中断进程的,并且用了 SIGALRM 这个信号,而这个信号只在 unix-like 系统中,因此 Windows 无法运行这个脚本。

SIGALRM 在 python 中的用法如下:

1     
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import signal, os     

def handler(signum, frame):
print 'Signal handler called with signal', signum
raise IOError("Couldn't open device!")

try:
# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)
exception IOERROR:
# This open() may hang indefinitely
fd = os.open('/dev/ttyS0', os.O_RDWR)
finally:
signal.alarm(0) # Disable the alarm

相关 [google 图片 爬虫] 推荐:

Google 图片爬虫

- - 吴良超的学习笔记
这里的 Google 图片爬虫指的是爬取在 Google 上通过关键词搜索得到的图片,由于最近需要一些特定领域的图片,而且现有的数据库满足不了要求,因此就想通过 Google 搜索筛选出这些特定领域的图片,然后下载下来后再进行人工筛选. 这里采用了两种方法,区别在于是否需要解析网页端的 JS 代码.

好用的Google漏洞爬虫:Google Mass Explorer

- - FreeBuf.COM | 关注黑客与极客
这是一款基于谷歌搜索引擎的自动化爬虫. 先进行一次谷歌搜索,将结果解析为特定格式,然后再提供给exp使用. 大家可以尝试使用–help来列出所有参数. 这个项目笔者会持续更新,以后再添加新的exp进行升级. 此外,它会利用google_parsers模块去构建exp解析搜索结果,所以当你开始搜索时,可以选择“–exploit parser”参数来指定相应exp.

Google 爬虫们已经会执行 JavaScript 来探索更多内容了

- - 谷奥——探寻谷歌的奥秘
Ars Technica报道说,Google搜索引擎的爬虫们现在可以索引并执行网页里的JavaScript和那些隐藏在AJAX下面的内容了. Google的SEO大神Matt Cutts也在 Hacker News的报道下面留言说:. Google会继续让爬虫变得更好更聪明,包括让它们更好的执行JavaScript并探索到里面的内容.

网络爬虫

- - 四火的唠叨
文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》. 最近在写一个程序,去爬热门事件和热门关键词网站上的数据. 网络爬虫也叫做网络蜘蛛,是一种互联网机器人,把需要的网页撷取下来,组织成适当格式存储. 它是搜索引擎的重要组成部分,虽然从技术实现上来说,它的难度往往要小于对于得到的网页信息的处理.

Google支持HTTPS图片搜索

- marmot694745 - 月光博客
  Google的HTTPS搜索终于支持图片了,至此Google的大部分搜索功能都已经支持HTTPS加密方式的搜索,从而解决了在加密环境下进行Google搜索的问题.   对于中国用户来说,目前使用HTTPS的Google搜索还需要使用Hosts文件,经过我的测试,HTTPS的图片搜索有时候会出现被干扰的现象,导致图片无法显示,如果未来预览图片无法访问的话,可以通过修改Hosts的方式继续访问加密方式的图片搜索,来查看搜索的预览图片.

Google+ 大更新:热贴、分析、图片编辑和 Google Apps 支持

- 可可 - 谷奥——探寻谷歌的奥秘
首先是热贴的显示,在Google+左侧列表里会看到多出了What's hot,点击就进入热贴列表,这里列出了所有热门的信息流,让你知道现在最火热的话题(如上图). 其次是Google+ Ripples,这其实是Google Wave里当初一个被Google神化的功能,让你看到一个信息流被分享出去的整个过程,你可以详细看到每次分享的用户,以及每次分享的分支.

【9to5 Google】Google利用“知识图谱”优化图片搜索结果

- - 译言-电脑/网络/数码科技
自去年发布“图片搜索”功能以来,Google几乎每周都会更新算法. 如今,Google计划利用“知识图谱(Knowledge Graph)”继续优化这个大受欢迎的功能. 借助“图片搜索”功能,用户导入一张图片,Google即可反馈与此图相关的其他图片和搜索结果. 用户可以拖曳上传图片,或者输入图片网址.

JSOUP实现简单爬虫

- - ITeye博客
这个说是简单爬虫 其实连个爬虫也算不上吧 功能太精简了.... 流程很简单: 输入几个初始的网页 然后通过JSOUP获取网页中的a标签的href的值. 接着把新得到的地址放入任务队列中. 实现中的worker是一个单线程的派发器 用于产生Parser. Parser用于完成网页的保存 网页的解析 以及入队列操作.

最全Python爬虫总结

- - CSDN博客综合推荐文章
最近总是要爬取一些东西,索性就把Python爬虫的相关内容都总结起来了,自己多动手还是好. (2)保存爬取的图片/视频和文件和网页. (7)某个网站的站内所有目录爬虫. (9)爬虫框架Scrapy   . 二,保存爬取的图片/视频和文件和网页. #图片/视频和文件和网页的地址抓取下来后,利用模块urllib里的urlretrieve()方法下载下来:.

这是哪儿?大家一起猜google earth图片之谜吧!

- 虫虫 - 东西
如果你用google earth软件观察我们生存的星球,你总是会被它所拍摄到的图片所震撼:这些高清图片展示了地球生态的多样性以及人类活动在地球表面留下的斑斑痕迹. 今天你看到的这组图片是一个谜题. 我们邀请您浏览以下图片,请您根据图片猜出这些照片拍摄地点. )北方土地并没有大量出现在这组图片里,除了一些小小的改动之外,这些图片都是镜头带给我们最初的,未被更改的真实图片.