吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3934|回复: 18
收起左侧

[Python 原创] 某文库文档下载思路及实现

[复制链接]
JackLSQ 发表于 2022-11-29 21:43

背景环境就不说了,直接上思路

目标网站aHR0cHM6Ly9tYXguYm9vazExOC5jb20vaHRtbC8yMDIxLzA3MjUvODAyNzE0MDEyNDAwMzEyNC5zaHRt  base64加密

然后F12刷新一下,看一下网络请求数据,按类型进行排序看看有什么特殊的,对于一般的图片数据直接滤掉。重点是script类型的,每个点开看看返回值的预览

这里是排序之后的数据图片
01 01.png

点开其中一个后可以看到
如下所示
02 02.png

像是链接在浏览器打开看看

03 03.png

显然是我所需要的结果

对于请求地址还需要进行分析
对于剩下的部分再进行预览发现
https://openapi.book118.com/getPreview.html?&project_id=1&aid=384842396&t=bab2b40047ef33d3cb275b7cc01d752d&view_token=Ynvp_0jXyUnnbZnJWYbp4UGpXrkof2y9&page=1&callback=jQuery18308547967607001021_1669727735419&_=1669727735531

https://openapi.book118.com/getPreview.html?&project_id=1&aid=384842396&t=bab2b40047ef33d3cb275b7cc01d752d&view_token=Ynvp_0jXyUnnbZnJWYbp4UGpXrkof2y9&page=7&filetype=docx&callback=jQuery18308547967607001021_1669727735419&_=1669728705806

进行文本对比可以发现差别在于page后的参数不同 ,修改page参数在浏览器打开看看
04.png
在浏览中查看,显然也是需要的,在其网站可以看到这个pdf只有52页而且当变化page参数时,有些数据的返回值是一样的,从返回的结果中也可以看出,一次给出六个图片的地址,在设置循环的时候要注意一下步长和起始

该分析到的都分析完了,上代码
接下来写个python脚本进行请求下载即可

最后可以将所有的图片利用网上工具给整合到一个PDF中
这是源码展示

import requests
import json
import time

# 构造一个header
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
    "Referer": "https://max.book118.com/",
    "Host": "openapi.book118.com",
}
data = {}
#那个文档只有52页
for page in range(1, 52, 6):
    print(page)
    response = requests.get(
        url="https://openapi.book118.com/getPreview.html?&project_id=1&aid=384842396&t=bab2b40047ef33d3cb275b7cc01d752d&view_token=Ynvp_0jXyUnnbZnJWYbp4UGpXrkof2y9&page=" + str(
            page) + "&filetype=docx&callback=jQuery18307122965073661289_1669709562152&_=1669709622126",
        headers=header)
    time.sleep(3) # 防止请求太快而得不到数据
    # print(response.text[41:-2]) 
        # 因为返回的数据不完全是json格式的需要处理一下
    json_data = json.loads(response.text[41:-2])
    res = json_data["data"]

    print(res)
    data.update(res) # 将请求到的数据都合并到一个字典中

print(data)
for key in data.keys():
    data[key] = data[key].replace("//", "")

print(data)
#对于字典中的链接发起请求
for key in data.keys():
    response = requests.get("http://" + data[key])
    img = response.content
        # 二进制写入
    with open("./" + str(key)+".png", 'wb') as f:
        f.write(img)
    time.sleep(3)   # 防止请求太快而得不到数据
    print(data[key]+"写入成功")  

免费评分

参与人数 4吾爱币 +9 热心值 +4 收起 理由
yxh19 + 1 + 1 我很赞同!
zxcv110 + 1 + 1 感谢,摸索了半下午学会了,下载文档真方便
anydaicn + 1 热心回复!
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

YNNTAFTR 发表于 2022-11-30 21:28
你还可以通过orc直接合成文档
sdysjujuju 发表于 2022-12-1 11:17
Ma1vaceae 发表于 2022-12-1 15:13
xb1990218 发表于 2022-12-1 16:24
谢谢 分享  学到了!
tongyan 发表于 2022-12-1 23:30
VIP的扒不到
mengdedian 发表于 2022-12-2 00:43
能不能私聊我说下方法,看不到 有急用
eaglexiong 发表于 2022-12-2 11:24
不知道效果如何,要用用再评论
lfordch 发表于 2022-12-3 03:58
感谢分享!收藏了!
willlam 发表于 2022-12-5 00:01
感谢大神分享的思路,马上试试去
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 00:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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