目标网站:车300 二手车估价
反爬虫策略: 计算token,放到cookie里,刷新页面,出现目标页面
难度:中等偏下
我之前的一篇文章大概讲到过如何批量撸这个网站的数据,先吐槽下南京车300,目前我所在的公司的母公司。进入估价页面,显示浏览器指纹验证,再是拖滑块,然后文字点击。怎么就没有销售出来骂,什么狗屎用户体验。
也对,流量都在app上,pc端就是来肝爬虫的。对于做机器学习要搞OCR文字点击的,可以去采集训练集(斜眼笑)
好了,滑动和文字验证今天咱们不提,就单纯讲讲利用cookie做文章的反爬虫
进入估价页面,长酱色的:
然后咱们看源码,却是长酱色的:
好了,这里我提一下为什么一定要看源码,很多刚出道的爬虫工程师,在进入页面后,习惯性的就是检索元素,然后抓抓包看看api之类的,接着写脚本。
然后一请求,这是怎么回事啊?拿到一段html和原网页不同,里面嵌套一大段JavaScript。说到这里,我们来看看这段js
首先是定义的一个方法
大概就是讲重新构造一个url的参数。重点是下面这段 eval()开头的,我们将eval里的js格式化后,搜索 setParam
大概可以知道,这个大框里就是我们要的东西,setParam就是向url里重新写一个时间戳,然后重点就是
document.cookie = "spidercooskieXX12=" + t + ";path=/;",
document.cookie = "spidercodeCI12X3=" + r + ";path=/;",
可见,这个要向cookie写入两个东东。一个是 spidercooskieXX12 一个是 spidercodeCI12X3。那么这两个的所对应的 t 和 r是什么
继续回到刚刚的大框里,可以看到
t = "1547796252",
r = o(t + "");
r = r.slice(16, 32) + r.slice(0, 16),
那就简单了, t是一个像时间戳的东东;r呢,输出它就行了呀。然后我们把大框改写一下,加一个console输出r和t
结果呢,会报错。因为纯粹的js环境没有DOM,在这里我们需要在文件里添加
var window = {};
var document = {};
window.document = {};
window.location = {};
window.location.href = 'http://www.che300.com';
window.location.search = 'null';
如果在chrome里调试,就不用管,但是要把
window.location.href = setParam("rt", new Date().getTime()
这句删了,不然还没看到输出,页面就刷新了
然后运行
拿到数据。然后,再次请求刚刚的url,同时在cookie加入这俩参数,就可以看到正确的页面了
总结:
今天这个偏简单。但是依照笔者在工作中所遇到的实际情况,采用这样的思路做反爬虫的网站挺多,比如瓜子二手车
另外,咱们拿到数据是一回事,工程上又是一回事,不得不说车300在反爬虫上下了很大的功夫,据说老板也是做爬虫出生的。
嗯,它的app上面,用了签名验证,这个我没逆向过,拿不到如何md5加密的,所以暂时也没思路。
推荐