010-sha1+base64:爬虫练习网站

网站地址:爬虫练习网站

找加密参数及位置

找到接口:

加密参数:

直接搜索关键字:

打上断点,其他都不像,然后翻页触发断点:

进函数内部看看:

这里有一个sha1加密和base64编码,我们看看sha1是否是标准加密:

sha1是加密的,然后base64也看看:

都是标准的,看一下参数即可:

外面参数是offset:

下面开始扣代码

扣代码复现逻辑

先扣i函数:

将n全部改为第三方库:

然后将外部调用的代码扣下来:

封装成函数:

整体代码如下:

python 复制代码
CryptoJS = 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 = CryptoJS.SHA1(r.join(",")).toString(CryptoJS.enc.Hex)
        , c = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse([o, t].join(",")));
    return c
}

function encrypt_data(page) {
    var a = (page - 1) * 10
        , e = Object(i)("/api/movie", a);
    return {
        token: e,
        offset: a
    }
}


// console.log(encrypt_data(19));

返回a是因为后端会根据offset校验token

py调用

plain 复制代码
import execjs
import os
import requests

class JSExecutor:
    def __init__(self, file_path):
        if not os.path.exists(file_path):
            print('NotFoundFile')
        with open(file_path, 'r', encoding='utf-8') as f:
            self.js_code = f.read()

        self.js_code = execjs.compile(self.js_code)

    def run(self, func_name, *args):
        return self.js_code.call(func_name, *args)


def get_data(token, offset):
    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        'Pragma': 'no-cache',
        'Referer': 'https://spa2.scrape.center/page/2',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0',
        'sec-ch-ua': '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
    }

    params = {
        'limit': '10',
        'offset': str(offset),
        'token': token,
    }

    return requests.get('https://spa2.scrape.center/api/movie/', params=params, headers=headers).json()

if __name__ == '__main__':
    js_executor = JSExecutor('10.js')
    for page in range(1, 11):
        params_js = js_executor.run('encrypt_data', page)
        print(f'正在爬取第{page}页...')
        print(get_data(params_js['token'], params_js['offset']))

result:

小结

文章内容简单,小白可以试试手,如有问题及时提出,加油加油

相关推荐
一晌小贪欢18 分钟前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
躺平大鹅28 分钟前
5个实用Python小脚本,新手也能轻松实现(附完整代码)
python
yukai0800833 分钟前
【最后203篇系列】039 JWT使用
python
独好紫罗兰1 小时前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
Dfreedom.1 小时前
图像直方图完全解析:从原理到实战应用
图像处理·python·opencv·直方图·直方图均衡化
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
深蓝电商API2 小时前
爬虫请求频率控制与模拟人类行为
爬虫
怒放吧德德2 小时前
Python3基础:基础实战巩固,从“会用”到“活用”
后端·python
aiguangyuan2 小时前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
喵手2 小时前
Python爬虫实战:知识挖掘机 - 知乎问答与专栏文章的深度分页采集系统(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集知乎问答与专栏文章·采集知乎数据·采集知乎数据存储sqlite