Python利用requests和re模块爬取百度图片

本文重点:

  1. 通过分析网页源码,确定爬取地址
  2. 运用header中的referer参数防止反扒

直接上代码:

import requests
import re

# URL获取方法:
# 由于百度图片为动态加载,故采用下面方法获得要抓取的url
# 1、图片搜索结果页面点击F12或者右键查看元素
# 2、点击网络tab->XHR子tab
# 3、点击F5键或者浏览器刷新页面按钮
# 4、向下滚动页面,观察XHR列表中的请求列表
# 4、点击XHR列表中一个待抓取请求项
# 5、查看详情区域消息头->请求头->请求网址
url = 'http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=蜡笔小新&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&word=蜡笔小新&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&pn=120&rn=30&gsm=b4&1533906132304='

# headers里面的Referer参数表示当前请求页面的来源页面地址,用于防盗链,必须加上,否则请求返回403
# Referer获取方法:
# 1、请求页面点击F12或者右键查看元素
# 2、点击网络tab->XHR子tab
# 3、点击F5键或者浏览器刷新页面按钮
# 4、点击XHR列表中待抓取请求项
# 5、查看详情区域消息头->请求头->Referer
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0',
'Referer':'http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0',
}
html_doc = requests.get(url=url, headers=headers).content.decode()  # 获取字符串格式的html_doc

# 使用正则表达式收割图片的url
# 通过访问url的源码观察得知,图片的地址为thumbURL后面的部分
pat = re.compile(r'"thumbURL":"(http://.*?\.jpg)"')
url_lst = pat.findall(html_doc)

# 下载图片
count = 1 # 计数正在下载的图片序号
for url in url_lst:
	# urllib.request.urlretrieve(url, '%s.jpg' % (range(100)))   # 403 error
	pic = requests.get(url=url,headers=headers)
	# 需要在脚本目录下手动创建pic文件夹  
	with open('./pic/'+url[-20:], 'wb') as fp:
		print('Downloading %d picture...' % count)
		count += 1
		fp.write(pic.content)
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值