吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1525|回复: 0
收起左侧

[学习记录] [学习记录]记录下爬虫遇到的一个坑

[复制链接]
咸鱼灭 发表于 2021-5-14 13:17
昨天练习爬虫时遇到了个问题,在论坛老哥的指点下找到了视频信息的生成方式 QQ图片20210514124024.png 百度了下发现pako是JS里用于解压与压缩的包。然后我就高高兴兴的用pyexecjs调用这句代码,如下:
[JavaScript] 纯文本查看 复制代码
const pako = require('pako')
 
function cs(pin) {
    return pako.ungzip(pin, {to: 'string'});
}

[Python] 纯文本查看 复制代码
import requests
import execjs
from fake_useragent import UserAgent
 
url = 'https://v3.ddrk.me:9543/video?id=lKwK4yQuvITOqPfIV5uAXq%2F9fGucWarPlYhZA8P8a61vrP3SsDXhW8kAfLhTTVeCjSuZojJdGQ6oyQLvuB6WIaSx1Dp0iOGkYlfYmZBP7ujp2lU%2BPCMYU7KCuhVqIz3f&type=mix'
headers = {
    'user-agent': UserAgent().random,
}
res = requests.get(url, headers=headers)
pin = res.json()['pin']
print(pin)
 
with open('cs.js', 'r', encoding='utf-8') as f:
    x = f.read()
result = execjs.compile(x)
result = result.call('cs', pin)

运行后直接报错骑脸,搞了半天,终于在今天早上找到原因了,pako解压数据太(长)大时就会报错。知道原因就好办了,把数据分别解压拼接就行了。
[JavaScript] 纯文本查看 复制代码
const pako = require('pako')

function unzip(pin) {
    // 将二进制字符串转换为数字字符数组
    var charData = pin.split('').map(function (x) {
        return x.charCodeAt(0);
    });
    // 将数字数组转换为字节数组
    var binData = new Uint8Array(charData);
    // // 解压
    var data = pako.inflate(binData);
    array = new Uint16Array(data)
    var res = '';
    var chunk = 8 * 1024;
    var i;
    for (i = 0; i < array.length / chunk; i++) {
        res += String.fromCharCode.apply(null, array.slice(i * chunk, (i + 1) * chunk));
    }
    res += String.fromCharCode.apply(null, array.slice(i * chunk));

    strData = res
    return strData;
}


最后,再次感谢下昨天回帖的老哥们。

免费评分

参与人数 3吾爱币 +7 热心值 +3 收起 理由
aoe18cm + 1 + 1 热心回复!
没事路过 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 02:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表