百度图片api获取(包含获取原网址)

本文介绍了如何通过百度图片搜索API获取图片链接,特别是如何解密fromurl以获取原始图片地址。作者详细解释了解密过程,涉及到对fromurl进行编解码操作,并提供了Scrapy项目的相关文件结构。
摘要由CSDN通过智能技术生成

进入百度图片,搜索关键字

比如搜索关键词“赵丽颖”——打开调制模式(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=&copyright=&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
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值