JackLSQ 发表于 2022-11-29 21:43

某文库文档下载思路及实现

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

目标网站**aHR0cHM6Ly9tYXguYm9vazExOC5jb20vaHRtbC8yMDIxLzA3MjUvODAyNzE0MDEyNDAwMzEyNC5zaHRt**base64加密

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

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

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

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

03

显然是我所需要的结果

对于请求地址还需要进行分析
对于剩下的部分再进行预览发现
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参数在浏览器打开看看

在浏览中查看,显然也是需要的,在其网站可以看到这个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)
                # 因为返回的数据不完全是json格式的需要处理一下
    json_data = json.loads(response.text)
    res = json_data["data"]

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

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

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

YNNTAFTR 发表于 2022-11-30 21:28

你还可以通过orc直接合成文档

sdysjujuju 发表于 2022-12-1 11:17

谢谢分享

Ma1vaceae 发表于 2022-12-1 15:13

{:301_984:}感谢分享~

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

感谢大神分享的思路,马上试试去
页: [1] 2
查看完整版本: 某文库文档下载思路及实现