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

本文介绍了如何使用Python结合Selenium库爬取soso、谷歌和360好搜的图片。通过模拟浏览器行为加载动态网页,抓取并下载图片,提供了一个具体的爬虫代码示例。文章还提到,对于百度图片的爬取,处理方式略有不同,并链接了相关博文进行进一步讨论。
摘要由CSDN通过智能技术生成

做图像处理的朋友,都时常需要收集整理大量的图像数据集。做科研时有各种现有的标准数据集大家都直接拿来用,但是工程上却经常需要自己收集图片,从网上爬取图片便成了比较常见的任务。为了用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)

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

原文:http://blog.csdn.net/seanwang_25/article/details/43317147

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值