scrape 第六关

JS逆向爬虫实战:破解加密Token获取电影数据

一、问题背景

在爬取某电影网站(spa6.scrape.center)时,发现其API接口/api/movie/的请求参数token经过加密处理。直接使用Python的requests库请求拿不到数据,需逆向分析token生成逻辑并复现加密过程。
在这里插入图片描述


二、逆向分析过程

1. 定位加密入口

通过浏览器开发者工具的Search功能,搜索关键字token,定位到以下关键代码段:

_0x263439 = Object(_0x2fa7bd['a']) (this['$store']['state']['url']['index']);

调试发现_0x263439即为加密后的token,其值由_0x2fa7bd['a']函数生成。

在这里插入图片描述

在这里插入图片描述

2. 分析加密函数逻辑

进一步追踪发现,加密函数的核心逻辑如下:
在这里插入图片描述

  • 明文组成:将API路径/api/movie与当前时间戳拼接,格式为/api/movie,<timestamp>
  • 加密方式:对拼接后的字符串进行SHA1哈希计算,生成十六进制摘要
  • 最终Token:将哈希值与时间戳拼接并转化为bs64格式

3. 验证加密逻辑

通过调试确认,加密结果形如:

MmRlOWM0MWI3NzhiZDhlY2MwODVjYmVmMTEzODE2ZTgxZTNiOTBjOSwxNzQ2NjE2MjM5

三、加密算法复现

1. JavaScript实现(原逻辑)

// sha1.js
const crypto = require('crypto');

function encrypt() {
    const _time = Math.floor(Date.now() / 1000);
    const path = "/api/movie";
    const plainText = path + "," + _time;
    const hash = crypto.createHash('sha1').update(plainText).digest('hex');
    return hash + "," + _time;
}

2. Python复现(通过execjs调用)

# sha1加密.py
import execjs
import base64

with open('sha1.js', 'r', encoding='utf-8') as f:
    js_code = f.read()
js = execjs.compile(js_code)
token = js.call('encrypt')
data_bs64 = base64.b64encode(token.encode()).decode()

四、完整爬虫实现

1. 请求参数构造

  • Token生成:调用上述JS代码生成加密字符串,并进行Base64编码
  • 分页逻辑:通过offset参数控制翻页,每页10条数据

2. 核心代码

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
    "Referer": "https://spa6.scrape.center/"
}

url = "https://spa6.scrape.center/api/movie/"

for page in range(10):
    params = {
        "limit": 10,
        "offset": page * 10,
        "token": data_bs64  # 替换为实际生成的Token
    }
    resp = requests.get(url, headers=headers, params=params).json()
    for item in resp['results']:
        print(item['name'], item['score'])

3. 关键点说明

  • 时间同步:需保证服务器与本地时间误差不超过1秒
  • Base64编码:原始SHA1字符串需进行编码后传递
  • 反爬策略:需携带Headers,特别是ua系列参数

五、结果验证

成功获取分页数据,输出示例:

肖申克的救赎 9.7
霸王别姬 9.6
阿甘正传 9.5
...
第10页数据爬取完毕

六、总结

  1. JS逆向核心:通过断点调试定位加密函数,分析输入输出关系
  2. 跨语言实现:使用execjs桥接JavaScript加密逻辑
  3. 工程化扩展:可改用纯Python实现SHA1避免依赖Node.js

完整代码已上传Gitee:【项目连接

逆向启示录:面对前端加密时,重点追踪网络请求前的参数生成过程,善用浏览器调试工具的SearchBreakpoint功能可事半功倍。

爬虫Python学习是指学习如何使用Python编程语言来进行网络爬取和数据提取的过程。Python是一种简单易学且功能强大的编程语言,因此被广泛用于爬虫开发。爬虫是指通过编写程序自动抓取网页上的信息,可以用于数据采集、数据分析、网站监测等多个领域。 对于想要学习爬虫的新手来说,Python是一个很好的入门语言。Python的语法简洁易懂,而且有丰富的第三方库和工具,如BeautifulSoup、Scrapy等,可以帮助开发者更轻松地进行网页解析和数据提取。此外,Python还有很多优秀的教程和学习资源可供选择,可以帮助新手快速入门并掌握爬虫技能。 如果你对Python编程有一定的基础,那么学习爬虫并不难。你可以通过观看教学视频、阅读教程、参与在线课程等方式来学习。网络上有很多免费和付费的学习资源可供选择,你可以根据自己的需求和学习风格选择适合自己的学习材料。 总之,学习爬虫Python需要一定的编程基础,但并不难。通过选择合适的学习资源和不断实践,你可以逐步掌握爬虫的技能,并在实际项目中应用它们。 #### 引用[.reference_title] - *1* *3* [如何自学Python爬虫? 零基础入门教程](https://blog.csdn.net/zihong523/article/details/122001612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [新手小白必看 Python爬虫学习路线全面指导](https://blog.csdn.net/weixin_67991858/article/details/128370135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值