社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

JB的Python之旅-爬取phizhub网站

jb • 5 年前 • 395 次点击  
阅读 106

JB的Python之旅-爬取phizhub网站

前言

先说明,本文是水文,跟Python也没关系的,写着Python,是因为jb用py写爬虫比较多;

本文只是简单介绍个网站如何爬虫的思路,文章很短,1分钟看完,没啥特别的,完~

讲故事啦

为什么要说这事,是因为今早在某群看到有同学问,访问接口没有数据,是啥问题;

image.png-73.2kB

第一反应就是,请求参数不对,但接着该同学说,参数都一样的,还是没数据;

image.png-41.8kB

刚好看到了,就试试吧,打开首页,是个表情包的网站,够骚的~

image.png-69.5kB

常规操作,Chrome F12-network,选择XHR,现在一般网站都是ajax加载图片的,所以直接选择xhr了,刷新网页,这不就有数据了吗?

image.png-47.6kB

逐个点击看返回的内容,不难找到图片地址;

image.png-208.9kB

这样,接口地址也出来了:

http://www.phizhub.com/phiz/get_phiz_list/?category=-1&page=1&last_time=0&page_size=40
复制代码

后面的参数,不纠结,把这个地址放到Chrome上访问,发现居然是没数据:

image.png-29.5kB

行吧,可能是因为请求时需要特定的参数,用postman模拟一波,按照上面看到的参数搞一波,发现还是没有数据:

image.png-94.1kB

一开始以为参数不对或者有遗漏,检查一遍发现还是不行,那就说明,可能是服务器有检验机制了;

先看了一下body,那4个参数都很正常,可以排除了;

image.png-14.2kB

再看看请求头,看到一个sss参数跟timestamp参数,其他参数看着都正常;

image.png-69.8kB

首先,这个sss可能性很大,因为这命名很奇怪,另外,校验时间戳,也合理;

刷新几次网站,发现这两个参数都是会变化的,因此更加怀疑了;

每次刷新都能正常显示,当时自己模拟的时候又不行,参数肯定是没错的,这是不是说明,有时效性限制

既然有这样的怀疑,就测试一下吧,刷新网页,把ssstimestamp的值复制到postman模拟,经过几次,偶然发现居然可以的;

image.png-102.9kB

同样的参数,再post一次,发现就返回空数据了,就证实了时效性校验的机制,而且这个时效性极短,5秒内!

参数逻辑

下面讲讲这两个参数的逻辑;

时间戳,一般是当前时间戳,拿去转化看看,发现就是当前时间,无难度:

image.png-10.8kB

问题就在sss这个玩意,这种情况只能找源码,那怎么看?

首先,返回到这个页面,此时,红框里的就是需要分析的接口;

image.png-90.8kB

那把鼠标移动到右侧的jquery-1.8.3.min.js文件,此时会弹出一堆js文件;

image.png-108.5kB

逐个找,点击一个你觉得很大可能跟数据有关的文件,这里不难看出,就是get_data,那就点击右侧的js文件吧;

image.png-30.6kB

点击后,直接跳转到这里,sss对应的是代码的abc,而abc是get_abc函数生成的,而且需要时间戳做参数;

image.png-46.1kB

一般情况下,浏览器默认是非调试状态,那就点击右上的按钮,暂停下吧;

image.png-135.8kB

点击后,会自动打开一个文件,乱七八糟一大堆,不想看;

image.png-247.4kB

既然不想看,就返回到刚刚那个js文件吧,然后把鼠标移动到get_abc函数上;

image.png-19.1kB

然后点击,逻辑不就出来了吗?

image.png-9.2kB

因此,这两个参数的逻辑如下:

function current_timestamp(){return(new Date).getTime()};
# 当前时间戳

function get_abc(a){return $.md5("phizhub_abc_"+a)}
# sss就是phizhub_abc_+当前13位时间戳拼接而成的md5
复制代码

故事完,可以愉快啪啪啪了,脚本没有,纯提供分析思路;

小结

看吧,都说是水文,你还不信?

本文也没讲到啥,只是现在爬虫的门槛会越来越高,而学会怎么找js源码,算是当今爬虫必备的技能了,希望对你有帮助~

谢谢大家~

1-140R3154U8.jpg-9kB


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/hpY7s1IonO
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29035
 
395 次点击