关卡
spa2
电影数据网站,无反爬,数据通过 Ajax 加载,数据接口参数加密且有时间限制,适合动态页面渲染爬取或 JavaScript 逆向分析。
首先抓包发现get请求的参数token有加密。 offset表示翻页,limit表示每一页有多少条数据。

抓到加密 Token 之后,就要找出 Token 值是怎么生成的,
搜索token:看js代码在哪里

点进去,打上断点调试看看

e = Object(i["a"])(this.$store.state.url.index, a)
分析这段代码:
这行代码中,Object(i["a"]) 是一个函数调用,它接受两个参数 this.$store.state.url.index 和 a,然后将它们传递给函数 i["a"],并将结果赋值给变量 e。
根据代码的语境,可以推测这行代码的作用是使用 this.$store.state.url.index
和 a
作为参数调用了对象 i
的方法 a
,并将结果赋值给了变量 e
。


加密位置就这里扣下来

完整代码
js
javascript
const n = require('crypto-js');
function i() {
for (var t = Math.round((new Date).getTime() / 1e3).toString(), e = arguments.length, r = new Array(e), i = 0; i < e; i++)
r[i] = arguments[i];
r.push(t);
var o = n.SHA1(r.join(",")).toString(n.enc.Hex)
, c = n.enc.Base64.stringify(n.enc.Utf8.parse([o, t].join(",")));
return c
}
python
python
import requests
import execjs
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
}
for offset in range(0,100,10):
js_da=execjs.compile(open('6.js','r',encoding='utf-8').read()).call('i','/api/movie',offset)
params = {
'limit': '10',
'offset':offset ,
'token': js_da,
}
response = requests.get('https://spa2.scrape.center/api/movie/', params=params, headers=headers)
print(response.json())
运行结果
结束