【雪球爬虫】绕过反爬
初印象
作为提供金融相关数据的网站,雪球一定有做一定程度的反爬。
以实时新闻接口举例。如果用一个没有访问过雪球网站的浏览器来访问这个网址,会得到状态码为400
的返回:
1 | { |
但如果在浏览器里先访问一次雪球页面,无需登录,再访问这个接口,就可以正常返回。
阿里云 WAF
反爬机制的第一层是阿里云 WAF,它会植入一个名为acw_tc
的 cookie,有效期为30分钟
,在之后的的交互中会验证它。
雪球自身 cookie
雪球植入的 cookie 有很多,但 API 会验证的只有xq_a_token
一个。只需要用浏览器访问过一次雪球网站,就会有这个 cookie。我们可以先用浏览器访问一次,然后把这些 cookie 复制到爬虫里。
敏感数据
像实时新闻和行情这些数据比较不敏感,如果想获取某个大 V 的时间线,会有额外的反爬机制。
即使在 cookie 里带上了acw_tc
和xq_a_token
,也不会正常返回数据,而是返回一个 html 页面。
这个 html 页面没有显示内容,只有一个script
标签。作用是生成md5
参数然后带着这个参数跳转。
看了一下生成参数的代码,混淆程度很高,js 逆向水平不够,暂时挂起。这里有一个帖子可以关注。
更敏感的数据
即使是带上了md5__1038
校验参数,在获取第 2 页时间线时,仍然会得到一个状态码为400
的错误:
1 | { |
到这里就真正需要用户登录了。通过xq_a_token
来关联用户。
解决方案
暂时放弃逆向 md5 参数算法,使用无头浏览器。