进入百度图片,搜索关键字
比如搜索关键词“赵丽颖”——打开调制模式(F12)
众所周知,一般图片的url以json列表方式进行输出,所以我们直接去
XHR模块去查找json列表。(刚刷新时没有数据出现,这时我们只需要滚动
滚轮即可获得数据更新)如下图:
打开右方acjson连接进入预览,我们可以发现列表已经出现,这个json
的网址也很于一四,经过反复测试,发现规律如下:
https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E8%B5%B5%E4%B8%BD%E9%A2%96+%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E8%B5%B5%E4%B8%BD%E9%A2%96+%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=star&pn=30&rn=30&gsm=1e&1598868283333=
》》》》%%%%%%%%%%%%%%%%%%%%%%%》》》》
https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&word=赵丽颖+图片&pn=
对原网址进行删减,网址就变成如上所示,其中pn即pagenumber,其取值
规律为30*n(n=1,2,3,4,),word为关键词,可以有多个关键词,以“+”
连接。 此处over
接下来随便点开其中一个json内容,看看里面都有些什么元素:
我们发现,里面有各种url,其实从这些url的命名,我们大概也能猜到这
些url是什么东西了,比如hoverurl,,,hover是翱翔的意思,也就是显
示在最上面的图片,就是第一幅图里面那样,很多缩略版的图片聚集在
一个页面上的样式,而fromurl是此图片的来源。对于hoverurl没啥可说
的,没有经过加密,直接拿来就可以用。而fromurl经过加密(反正下载
fromurl又不用占你们百度的服务器,为啥加密呢)。接下来就对此解
密。
解密fromurl
fromurl的内容格式为:“ippr_z2C$qAzdH3FAzdH3Fooo_z&e3B33da_z&e3Bv54AzdH3F4xAzdH3F1ws7AzdH3Fg7AzdH3Fziw5stytg2AzdH3Fd9bbd_m_z&e3Bip4s”
这是一个网址加密而成,我们需要做的就是对其进行解密,这时我们需
要进入js里面进行断点调试之类。首先呢,我们需要的是随便点开一个
图片,这时图片的url就不再是hoverurl了,已经是由fromurl经过一系列
转换而成。
我们打开调试模式,在img里悬着一张图片(选择与其他图片url格式相
似的图片),查看其发起请求的过程
我们看到,第一张hover图片的url获取发起程序链为:search>base_a66ce51.js>url
fromurl则为 search > detailbase_c8da527.js。如此我们直接去detailbase_c8da527.js干活吧。
进入此js文件,我们crtl + F寻找fromURL字样,经过分析发现,81处fromURL只有一处是对其进
行赋值编码解码,其他的地方都为引用。
而解码函数即为uncompileurl,继续查找此函数,发现此函数代码如下:uncompileURL: function(t) { return /^(http|https)/.test(t) ? t : this.uncompile(t) }
其实这里test函数在js里面代表匹配,这一行意思是如果t中含有http或https,就执行
this.uncompile。既然网址,如果不为空,肯定含有,那我们就去找this.uncompile。
uncompile: function(e) {
if (!e)
return “”;
var i = e.replace(r, function(n, r) {
return t[r]
});
return i.replace(n, function(n, r) {
return t[r]
})
}`c
,这一看就知道是对我们fromurl那一串看不懂的东西进行编解码。
此函数,先执行i-r替换,然后对i-n替换,这些替换模式名字为r,n,一般在此函数上方,往上查
找
var t = {
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