爬虫高级篇,教你如何抓取接口

爬虫高级篇,教你如何抓取接口

今天要爬取目标网站是极简壁纸,先放张图,这就是我们要爬取的首页,

在这里插入图片描述

由于网站禁止了右击—>检查,F12,

在这里插入图片描述

选择Elemets,随便定位一张图片试试,

在这里插入图片描述

可以看到,这是缩略图,而我们要爬取的是高清原图,

在这里插入图片描述

去Network查看,发现返回的html并没有我们想要图片数据

<div class="view-body" :class="{
     
     'view-body-classify':config.page.active == 'classify'}">
                <div :id="'box_'+j.i" v-for="(j,index) in json.view" class="img-box">
                    <img :id="j.i" v-lazy="getUrl(j.i,j.t)" data-type="img-box" :data-index="index" v-if="j.t != 'ad'" :key="getUrl(j.i,j.t)" width="100%" alt="" @click="showFull(index)">
                    <img :id="j.i" src="img/ad.png" v-if="j.t == 'ad'" style="width:100%;z-index:-1000" alt="" transform="translate(-50%, -50%)" onload='loadAdsense("box",this)'>
                </div>
                <div v-if="config.page.active == 'like' && json.likes.length == 0" class="nolikemsg center">
                    <span>
                        您还没有收藏喜欢的图片<br>
                        点击图片上的小红心试试&nbsp;<span class="heart iconfont iconheart"></span>
                    </span>
                </div>
            </div>

显然数据是通过js先成上去的,因此,接下来就是抓接口了,怎么抓?

打开Network,刷新页面,选择XHR(过滤ajax请求),会发现有个getJson请求,点进去看看,这不就是我们要的数据吗?

在这里插入图片描述

有了数据,那就简单了,只要朝getJson这个接口发送请求那不就可以获取数据了吗,关键是如何发送请求,模拟请求的关键的参数,所以第一步,我们应该看看请求有哪些参数,

accept: */*
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9,en;q=0.8
access: e7809d01583f1f91da7ad087fd736c97e5df2780557bc50f54a4e80ba438cf9c
cache-control: no-cache
content-length: 30
content-type: application/json
location: bz.zzzmh.cn
origin: https://bz.zzzmh.cn
pragma: no-cache
referer: https://bz.zzzmh.cn/
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
sign: ea04368c4c168320af527f08a6501345
timestamp: 1603903026787
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36

已过一步步测试发现sign参数只有在更换浏览器时改变,而access和timestamp每次都在变化,显然timestamp代表时间戳,所以关键参数在与access,可以猜想一下access应该是经过某种加密加密过的字符串,感觉像是md5,那么这该如何解决呢?

不管怎样,先把access参数复制一下去全局搜索一下,发现没有,那怎们办啊?

在这里插入图片描述

既然前端没有,那肯定是js生成的,那么接下来的思路就是寻找js代码,该如何下手了?

观察返回前端代码,发现引用的js大都是cdn,显然不会有核心逻辑。

在这里插入图片描述

进去看看

在这里插入图片描述

这便是js代码,26行那一堆代码是什么,显然不符合js语法,猜想应该是混淆了,为什么要混淆?答案很明显(心中窃喜),看来方向找对了。

既然混淆了,那就应该解混淆,网上js在线解混淆的网站一堆,我就不示范了,不会就去百度。

得到解混淆后的js代码,搜索关键参数access,恍然大悟。

在这里插入图片描述

果然是md5加密没错,只要我们模仿该加密方式,生成参数access,不就可以向后端请求数据了吗?

在这里插入图片描述

经过一番折腾,确实拿到数据,可这数据该怎么用?

在这里插入图片描述

可以发现前端图片链接都是通过getUrl这个函数生成的,那么我们可以去js中搜索看看,

在这里插入图片描述

果然在这了,if判断猜想一下,应该一个是原图一个是缩略图的链接,按照该方法生成链接即可,大致思路就这了,博主已经码不动了,如果觉得有用,点赞支持是我最大的动力!

猜你喜欢

转载自blog.csdn.net/m0_48769739/article/details/109349646