selenium+python 爬取网络图片(1) -- soso、谷歌、好搜

做图像处理的朋友,都时常需要收集整理大量的图像数据集。做科研时有各种现有的标准数据集大家都直接拿来用,但是工程上却经常需要自己收集图片,从网上爬取图片便成了比较常见的任务。为了用python完成这个任务,需要解决如下两个问题:

1. 图片素材源自哪里呢?第一直觉就是搜索引擎里的图片,比如要收集手机的图片,则进入搜索引擎搜索关键字即可得到大量相关图片。

2. 动态网站的内容往往是通过ajax异步加载,直接用python中urllib库read到的内容不完整,且需要的内容基本都是异步加载进来的,直接获取不到。当然,有些任务可能只需处理些静态网页,但不幸的是,现在动态网页基本是主流,且我们爬图片的网站图片基本都是ajax加载的。所以如何解决爬取动态网站的问题呢?回答是采用selenium库模拟浏览器打开网页加载完全后再处理。这个解决方案可以参考博文,该文总结了4中方案,其中使用selenium比较适合这个任务。

本篇文章给出基于soso搜索引擎的图片爬虫程序,对google和360的好搜方式相同。但是爬百度的稍微麻烦点,参见另一篇博文。

首先,进入soso搜索,输入查询词“手机”,出现大量手机图片,如图

上图中网址栏的地址就是待爬取网页的url,然后给出python结合selenium爬取图片的代码如下

from selenium import webdriver
import time
import urllib

# 爬取页面地址
url = 'http://pic.sogou.com/pics?query=%CA%D6%BB%FA&w=05009900&p=40030500&_asf=pic.sogou.com&_ast=1422627003&sc=index&sut=1376&sst0=1422627002578'

# 目标元素的xpath
xpath = '//div[@id="imgid"]/ul/li/a/img'

# 启动Firefox浏览器
driver = webdriver.Firefox()

# 最大化窗口,因为每一次爬取只能看到视窗内的图片
driver.maximize_window()

# 记录下载过的图片地址,避免重复下载
img_url_dic = {}

# 浏览器打开爬取页面
driver.get(url)

# 模拟滚动窗口以浏览下载更多图片
pos = 0
m = 0 # 图片编号
for i in range(10):
	pos += i*500 # 每次下滚500
	js = "document.documentElement.scrollTop=%d" % pos
	driver.execute_script(js)
	time.sleep(1)   

	for element in driver.find_elements_by_xpath(xpath):
		img_url = element.get_attribute('src')
		# 保存图片到指定路径
		if img_url != None and not img_url_dic.has_key(img_url):
			img_url_dic[img_url] = ''
			m += 1
			ext = img_url.split('.')[-1]
			filename = str(m) + '.' + ext
			#保存图片数据
			data = urllib.urlopen(img_url).read()
			f = open('./yourfolder/' + filename, 'wb')
			f.write(data)
			f.close()
driver.close()

上面的代码只下载了第一页,selenium还可以模拟点击网页触发加载更多图片。此外,保存图像的代码段也可以简化成一句

urllib.urlretrieve(img_url, './yourfolder/%s' % filename)

最后,爬取出来的图片如下图所示,下一篇介绍如何爬取百度图片。

时间: 2024-10-08 09:43:32

selenium+python 爬取网络图片(1) -- soso、谷歌、好搜的相关文章

selenium+python 爬取网络图片(2) -- 百度

上一篇博文介绍了如何用selenium+python在诸如soso.谷歌.好搜等搜索引擎上爬取图片的方法,但是却没用提到百度,因为百度的情况比较特殊.首先,百度图片的数据更好,因为每幅图片都有"data-desc"描述可以作为图像很好的语义标签,此外基于百度较强的技术其查询搜索得到的图片相关性较高,后续人工筛选工作较少:其次,百度图片的数据不容易爬取,如果像前一篇文章中的方法取img标签的src值作为下载url,是下载不到图片的,得到的知识167B的非图像数据. 那么,如何爬取百度图片

selenium+python爬取数据跳转网页

项目要做一个四个层级栏的数据抓取,而且点击查询后数据会在新跳出的网页. 源码如下 注释解释 from selenium import webdriver import selenium #from time import sleep as sp url='http://202.127.42.157/moazzys/nongqing.aspx' site=webdriver.Chrome() site.get(url) #data={} mainhandle=site.current_window

[python爬虫] Selenium定向爬取虎扑篮球海量精美图片

前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员还是写个程序来进行吧!        所以我通过Python+Selenium+正则表达式+urllib2进行海量图片爬取.        前面讲过太多Python爬虫相关的文章了,如爬取新浪博客.维基百科Infobox.百度百科.游迅网图片,也包括Selenium安装过程等等,详见我的两个专栏: 

[python爬虫] Selenium定向爬取PubMed生物医学摘要信息

本文主要是自己的在线代码笔记.在生物医学本体Ontology构建过程中,我使用Selenium定向爬取生物医学PubMed数据库的内容.        PubMed是一个免费的搜寻引擎,提供生物医学方面的论文搜寻以及摘要.它的数据库来源为MEDLINE(生物医学数据库),其核心主题为医学,但亦包括其他与医学相关的领域,像是护理学或者其他健康学科.它同时也提供对于相关生物医学资讯上相当全面的支援,像是生化学与细胞生物学.        PubMed是因特网上使用最广泛的免费MEDLINE,该搜寻引

使用python爬取MedSci上的影响因子排名靠前的文献

使用python爬取medsci上的期刊信息,通过设定条件,然后获取相应的期刊的的影响因子排名,期刊名称,英文全称和影响因子.主要过程如下: 首先,通过分析网站http://www.medsci.cn/sci的交互过程.可以使用谷歌或火狐浏览器的“审查元素-->Network”,然后就可以看到操作页面就可以看到网站的交互信息.当在网页上点击“我要查询”时,网页会发送一个POST消息给服务器,然后,服务器返回查询结果 然后,将查询到的结果使用正则表达式提取出需要的数据. 最后将提取出的数据输出到文

使用selenium + Chrome爬取某网站乌云公开漏洞文章并保存为pdf文件

目的:使用selenium + Chrome爬取某网站指定类型的乌云公开漏洞文章,即在win10终端输入漏洞类型(如未授权),则爬取所有该类型的漏洞文章,并把每个分页的数字作为文件夹名,来保存该分页下面的所有的漏洞文章. 总结:本例只是能简单的爬取某一类型漏洞的所有文章,但不能爬取多个类型漏洞的所有文章,有时可能会有一些小bug导致没爬取完就崩溃,需要手工修改进而重新爬.其它问题解决看注释. 关于python代码里面出现中文在windows里面的处理,还没完全掌握.可参考Python for W

Python 爬取的类封装【将来可能会改造,持续更新...】(2020年寒假小目标09)

日期:2020.02.09 博客期:148 星期日 按照要求,我来制作 Python 对外爬取类的固定部分的封装,以后在用 Python 做爬取的时候,可以直接使用此类并定义一个新函数来处理CSS选择部分的动态选择. 好了,先说一下设计初衷!我在之前两次的爬取任务中发现我用到的爬取仅仅就是 requests 爬取和 selenium 爬取,而且呢~这两部分的爬取都是按照一定的步骤来做的,第一步,网页加载:第二步,获取 HTML 内容:第三步,使用 CSS 选择器进行筛选:第四步,处理数据打包保存

使用python爬取csdn博客访问量

最近学习了python和爬虫,想写一个程序练练手,所以我就想到了大家都比较关心的自己的博客访问量,使用python来获取自己博客的访问量,这也是后边我将要进行的项目的一部分,后边我会对博客的访问量进行分析,以折线图和饼图等可视化的方式展示自己博客被访问的情况,使自己能更加清楚自己的哪些博客更受关注,博客专家请勿喷,因为我不是专家,我听他们说专家本身就有这个功能. 一.网址分析 进入自己的博客页面,网址为:http://blog.csdn.net/xingjiarong 网址还是非常清晰的就是cs

python爬取某个网站的图片并保存到本地

python爬取某个网站的图片并保存到本地 #coding:utf-8 import urllib import re import sys reload(sys) sys.setdefaultencoding('gb2312') #获取整个页面的数据 def getHtml (url): page = urllib.urlopen(url) html = page.read() return html #保存图片到本地 def getImg(html): reg = r'src="(.+?\.