前言:最近为了学习头条的加密代码,自己对signature as cp 的生成过程进行了研究和学习。
——————2020-9-17更新———————— toutiao又更新了接口 原来的接口,变成了右面的列表,参数也发生了变化
js中生成signature的代码也发生了变化,但是原来的逻辑,生成的signature还是可以使用的,只是携带的参数变了而已。 关于新的sign函数的构造,先占个坑,使用原来的逻辑也可以,有时间在更新。
1.目的是为了获取头条号用户的文章数据,要访问的是这个页面 https://www.toutiao.com/c/user/104246645773/ 2.进行抓包分析 发现这个是我们需要的数据 3.对接口进行分析,发现是get请求,需要带下面几个参数
1.全局搜索signature关键字 2.signature 参数是由 utils.tacSign() 生成的,你可以去构造utils对象,或者去分析tacSign方法 3.打断点调试,进入到tacSign方法里面 4.对tacSign 打断点调试,发现传入的两个参数e 是url的前缀,t是get请求的参数,构造出来一个o对象 5.调用window.byted_acrawler.sign(o) 生成了秘钥signature,现在关键是对sign这个方法进行破解 6.在console中输入window.byted_acrawler.sign 在vm中找到sign的执行函数 7.把这个TAC function全部复制出来, 8.我们把构造好的o对象用 window.byted_acrawler.sign(o)去执行,就生成了signature 9.用node执行JS的时候会各种报错,我们添加上一些windows或者document对象的属性,在里面添加navigator location 和body和cookie属性 10.会生成这样一个链接,拿个这个链接携带cookie就可以获取到内容了 11.signature 还有一种是比较长的,长sign不用携带cookie可以直接获取数据,长signature的获取先需要执行 页面中的一段JS代码,初始化一下,用纯JS执行的时候会报错缺少属性,会对浏览器特征进行检测。
如果对采集方案感兴趣或者对JS加密有兴趣的,可以加我qq: 330446875 学习交流(注明:头条爬虫)