先说明,本文是水文,跟Python也不要紧的,写着Python,是由于jb用py写爬虫比较多;jquery
本文只是简单介绍个网站如何爬虫的思路,文章很短,1分钟看完,没啥特别的,完~ajax
为何要说这事,是由于今早在某群看到有同窗问,访问接口没有数据,是啥问题; 浏览器
第一反应就是,请求参数不对,但接着该同窗说,参数都同样的,仍是没数据; bash
恰好看到了,就试试吧,打开首页,是个表情包的网站,够骚的~ 服务器
常规操做,Chrome F12-network,选择XHR,如今通常网站都是ajax加载图片的,因此直接选择xhr了,刷新网页,这不就有数据了吗? 函数
逐个点击看返回的内容,不难找到图片地址; post
这样,接口地址也出来了:测试
http://www.phizhub.com/phiz/get_phiz_list/?category=-1&page=1&last_time=0&page_size=40
复制代码
后面的参数,不纠结,把这个地址放到Chrome上访问,发现竟然是没数据: 网站
行吧,多是由于请求时须要特定的参数,用postman模拟一波,按照上面看到的参数搞一波,发现仍是没有数据: ui
一开始觉得参数不对或者有遗漏,检查一遍发现仍是不行,那就说明,多是服务器有检验机制了;
先看了一下body,那4个参数都很正常,能够排除了;
再看看请求头,看到一个sss
参数跟timestamp
参数,其余参数看着都正常;
首先,这个sss
可能性很大,由于这命名很奇怪,另外,校验时间戳,也合理;
刷新几回网站,发现这两个参数都是会变化的,所以更加怀疑了;
每次刷新都能正常显示,当时本身模拟的时候又不行,参数确定是没错的,这是否是说明,有时效性限制?
既然有这样的怀疑,就测试一下吧,刷新网页,把sss
跟timestamp
的值复制到postman模拟,通过几回,偶然发现竟然能够的;
一样的参数,再post一次,发现就返回空数据了,就证明了时效性校验的机制,并且这个时效性极短,5秒内!
下面讲讲这两个参数的逻辑;
时间戳,通常是当前时间戳,拿去转化看看,发现就是当前时间,无难度:
问题就在sss
这个玩意,这种状况只能找源码,那怎么看?
首先,返回到这个页面,此时,红框里的就是须要分析的接口;
那把鼠标移动到右侧的jquery-1.8.3.min.js
文件,此时会弹出一堆js文件;
逐个找,点击一个你以为很大可能跟数据有关的文件,这里不难看出,就是get_data
,那就点击右侧的js文件吧;
点击后,直接跳转到这里,sss
对应的是代码的abc
,而abc是get_abc函数生成的,并且须要时间戳作参数;
通常状况下,浏览器默认是非调试状态,那就点击右上的按钮,暂停下吧;
点击后,会自动打开一个文件,乱七八糟一大堆,不想看;
既然不想看,就返回到刚刚那个js文件吧,而后把鼠标移动到get_abc
函数上;
而后点击,逻辑不就出来了吗?
所以,这两个参数的逻辑以下:
function current_timestamp(){return(new Date).getTime()};
# 当前时间戳
function get_abc(a){return $.md5("phizhub_abc_"+a)}
# sss就是phizhub_abc_+当前13位时间戳拼接而成的md5
复制代码
故事完,能够愉快啪啪啪了,脚本没有,纯提供分析思路;
看吧,都说是水文,你还不信?
本文也没讲到啥,只是如今爬虫的门槛会愈来愈高,而学会怎么找js源码,算是当今爬虫必备的技能了,但愿对你有帮助~
谢谢你们~