语言:python 2.7
Library:urllib2,re
爬取流程:
1. 使用Chrome开发者工具,分析百度图片
a) 打开浏览器,在百度图片输入搜索关键【昆虫】,如下图
因为百度图片具有懒加载的特性,当页面向下滚动时,会从服务器加载新的图片资源。而这一过程,通常是用ajax实现的。因此我们推测,图片可以通过发送ajax请求(本质上就是http请求)来得到。
b) 在浏览器界面,鼠标右键选择【审查】,打开chrome开发者工具
c) 选择【network】标签页,分析网络请求
d) 重新刷新页面,并向下滚动页面,触发懒加载。涉及到的网络请求如下图所示,我们重点关注xhr请求,因为有很大可能,就是请求图片信息的ajax请求。
e) 我们注意到第一个xhr请求的地址,是logininfo,所以不太可能是请求图片。所以我们将焦点放到第二和第三个xhr请求上。点击第二个xhr请求,具体信息如下所示:
从上图信息可以发现,这个xhr请求中有一些关于搜索相关的参数,【queryWord=%E6%98%86%E8%99%AB】通过将信息进行URL解码,得出的结果为【queryWord=昆虫】,证明这个就是我们所要的,取得图片的xhr请求。
解码结果如图:
复制整个xhr请求的url地址,粘贴到浏览器的地址栏中,得到了该请求的响应数据。数据片段如下图:
我们注意到,数据中有一个data数组,并且每个元素中,都有一个objURL的属性,其值为:
”ippr_z2C$qAzdH3FAzdH3Frtv_z&e3Bcbrtv_z&e3Bv54AzdH3FcbrtvAzdH3F8cAzdH3Fn9AzdH3FbcAzdH3FddbcbPICRhY_8ad9_z&e3B3r2”
可以推测出,其值为加密后的url,具体加密后和加密前对应关系如下所示:
_z2C$q → :
AzdH3F → /
_z&e3B → .
w → a
k → b
v → c
1 → d
j → e
u → f
2 → g
i → h
t → i
3 → j
h → k
s → l
4 → m
g → n
5 → o
r → p
q → q
6 → r
f → s
p → t
7 → u
e → v
o → w
8 → 1
d → 2
n → 3
9 → 4
c → 5
m → 6
0 → 7
b → 8
l → 9
a → 0
根据对应关系,得出上面objURL所对应的图片路径为:
http://pic.58pic.com/58pic/15/34/85/22858PICRkY_1024.jpg
数据所有objURL进行解密操作,得出所有图片所对应的真实路径。
通过http请求图片,再将返回的数据,保存到文件中,就实现了图片的爬取。
2. 代码实现:
a) 发送xhr请求的代码片段
b) 通过正则表达式,在返回的字符串中,萃取出所有的objURL所对应的值
c) 将提取出的objURL,进行解密
d) 下载图片,并保存到文件中
完整代码下载:
链接: https://pan.baidu.com/s/1slB6XJJ 密码: s66j
相关文章
了解千锋动态
关注千锋教育服务号
扫一扫快速进入
千锋移动端页面
扫码匿名提建议
直达CEO信箱