前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反反爬虫系列(二)

反反爬虫系列(二)

作者头像
小歪
发布2019-03-07 14:49:53
1.3K0
发布2019-03-07 14:49:53
举报

目标网站:车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加入这俩参数,就可以看到正确的页面了

总结:

今天这个偏简单。但是依照笔者在工作中所遇到的实际情况,采用这样的思路做反爬虫的网站挺多,比如瓜子二手车

  1. 上一次咱们讲的是全局的token
  2. 这一次咱们讲的是每个页面的token
  3. 下一次咱们讲每个request的token

另外,咱们拿到数据是一回事,工程上又是一回事,不得不说车300在反爬虫上下了很大的功夫,据说老板也是做爬虫出生的。

嗯,它的app上面,用了签名验证,这个我没逆向过,拿不到如何md5加密的,所以暂时也没思路。

推荐

反反爬虫系列(一)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与算法进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档