Python+Selenium爬取多页百度图片

笔者最近在学习Python网络爬虫技术,接触了一些常用的库和框架,也尝试了多种场景。其中,爬取Ajax页面信息是相对比较麻烦的一个问题,而Selenium框架为这类问题提供了相对通用且易于操作的解决方案。这里分享一个分页爬取百度图片搜索结果的案例,希望对有需要的同学有所帮助。
话不多说,先上代码:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
import re
import time
import requests
import html

def getpageshtml(pagenum,wd):
	'''通过selenium获取滚动后的页面HTML'''
	#创建chrome浏览器
	chrome_options = webdriver.ChromeOptions()
	chrome_options.add_argument('--headless')
	browser = webdriver.Chrome(chrome_options=chrome_options)
	#加载百度图片信息
	try:
	    url = 'http://image.baidu.com/search/index?tn=baiduimage&word=' + wd
	    browser.get(url)
	    #滚动条向下滚动
	    js = 'var q=document.documentElement.scrollTop=10000'
	    for i in range(pagenum - 1):
	    	time.sleep(2)
	    	browser.execute_script(js)
	    #获取HTML
	    pagehtml = browser.page_source
	    browser.close()
	    #下载图片
	    downpics(pagehtml)
	except TimeoutException:
		getpageshtml(pagenum,wd)

def downpics(pagehtml):
    '''下载图片'''
    #正则获取图片URL
    plist = re.findall('" data-objurl="(.*?)[\?,"]',pagehtml)
    #循环下载
    uheader = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36'}
    i = 0
    for src in plist:
        i = i + 1
        print('正在下载: %d / %d' %(i,len(plist)))
        try:
        	#获取图片
	        r = requests.get(url=src,headers=uheader,timeout=5)
	        #生成本地文件名
	        filename = './pic/%s %s' %(str(i),src[src.rfind('/')+1:])
	        filename = html.unescape(filename)
	        if int(filename.rfind('.')) <= 0:
	        	filename = filename + '.jpg'
	        #写文件到本地
	        with open(filename, 'wb') as f:
	            f.write(r.content)
        except Exception as err:
        	print(err)
        	continue

#程序入口
if __name__ == '__main__':
	print('='*20,'百度图片爬虫','='*20)
	keyword = input('请输入图片关键词:')
	pagenum = input('请输入抓取页数:')
	if keyword and pagenum:
		print('正在获取数据,请耐心等待。预计 %d 秒后开始下载' %(int(pagenum)*2+3))
		getpageshtml(int(pagenum),keyword)

代码不长,getpageshtml函数负责使用Selenium框架获取到多页的图片搜索结果的HTML,然后downpics函数用正则解析出所有的图片URL并将图片文件写到本地。运行效果如下:
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值