Python实现某网站小说数据内容下载, 实现JS逆向解密

2023-12-29 17:45:43

嗨喽,大家好呀~这里是爱看美女的茜茜呐

环境使用:

  • Python 3.10

  • Pycharm

模块使用:

  • requests --> pip install requests

  • execjs --> pip install pyexecjs

  • re

如何安装python第三方模块:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  2. 在pycharm中点击Terminal(终端) 输入安装命令


👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可


爬虫实现流程:

1. 先抓包分析数据在什么地方
    - 打开开发者工具: F12
    - 刷新网页
数据包: https://c13.shuqireader.com/pcapi/chapter/contentfree/
响应数据(小说内容): 加密一段内容
涉及JS逆向问题 -> 得到一段密文 -> 通过JS代码进行解密 -> 网页中显示正常文字
- 搜索关键字: ChapterContent 找到对应js文件
- 找到文件之后, 在对应代码位置打上断点

爬虫代码实现步骤:

1. 发送请求 -> 模拟浏览器对于url地址发送请求
    模拟浏览器: 请求头 headers
    url地址: 获取密文链接
2. 获取数据
3. 解析数据
4. 保存数据

遇到数据加密, 基本操作就这样子的…

整本小说采集: 多章数据内容获取

分析请求链接变化规律
chapterId(章节ID) / ut(貌似是小说章节更新时间) / sign(签名)
请求: 第一章: https://www.shuqi.com/reader?bid=8893196&cid=2055266 (小说章节)
    能够得到 -> chapterId ut sign

代码展示

导入模块

'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
# 导入数据请求模块
import requests
# pip install pyexecjs
import execjs
# 导入正则表达式模块
import re

模拟浏览器

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

“”"

获取所有小说章节ID / 小说名 / 章节名

“”"

link = 'https://www.shuqi.com/chapter?bid=8893196'

发送请求

link_data = requests.get(url=link, headers=headers).text

“”"

解析数据

  • re.findall(‘数据’, ‘数据源’)

    从什么地方, 去找什么数据

找到你需要的数据, 前后都复制一段, 需要的内容用(.*?)
“”"

提取书名

name = re.findall('<title>(.*?)-书旗网</title>', link_data)[0]

章节ID 章节名

'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
info_list = re.findall('data-clog="chapter\$\$chapterid=(\d+)&amp;bid=8893196">(.*)', link_data)
print(name)
print(info_list)

for循环遍历, 提取列表里面的元素

for chapterId, title in info_list:
    print(chapterId, title)

“”"

获取 chapterId ut sign 请求参数

“”"

    chapter_url = f'https://www.shuqi.com/reader?bid=8893196&cid={chapterId}'

发送请求+获取数据

    chapter_data = requests.get(url=chapter_url, headers=headers).text
    # print(chapter_data)
    data = re.findall(f'UrlSuffix&quot;:&quot;\?bookId=8893196&amp;chapterId={chapterId}&amp;ut=(\d+)&amp;num=1&amp;ver=1&amp;aut=1702437625&amp;sign=(.*?)&quot;,', chapter_data)
    print(data)

“”"

获取密文内容

“”"

请求网址

    url = 'https://c13.shuqireader.com/pcapi/chapter/contentfree/'

请求参数

'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
    get_data = {
        'bookId': '8893196',
        'chapterId': chapterId,
        'ut': data[0][0],
        'num': '1',
        'ver': '1',
        'aut': '1702437625',
        'sign': data[0][1],
    }
    print(get_data)

发送请求

    response = requests.get(url=url, params=get_data, headers=headers)

获取响应数据

    json_data = response.json()
    print(json_data)

解析数据, 提取密文内容

    ChapterContent = json_data['ChapterContent']
    print(ChapterContent)

“”"

把密文数据转成明文 通过python执行js代码

“”"
读取js代码

    js_file = open('书旗.js', encoding='utf-8').read()

编译JS代码

    js_code = execjs.compile(js_file)

调用js代码函数

    res = js_code.call('_decodeCont', ChapterContent)

字符串替换

    content = res.replace('<br/>', '\n')

“”"

保存数据

“”"

'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
    with open(f'{name}.txt', mode='a', encoding='utf-8') as f:
        f.write(title)
        f.write('\n')
        f.write(content)
        f.write('\n')
    print(ChapterContent)
    print(res)
    print(content)

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

文章来源:https://blog.csdn.net/m0_72282564/article/details/135293592
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。