关于故宫紫禁城杂志 pdf 的爬取

2022-09-08 21:59:37 +08:00
 barnett2010

这是总目录 www.dpm.org.cn/online_search/cid/1005847.html 这是单期目录 www.dpm.org.cn/onlines_detail/257998.html 这是单期里的单个 pdf www.dpm.org.cn/Uploads/File/2022/08/29/u630c57f072d3d.pdf

我在脚本中运行下载,总是下载不到出来 pdf 。

上来问问各位大佬,要怎么搞?

如有不妥,管理可删。

2096 次点击
所在节点    Python
11 条回复
jifengg
2022-09-09 08:47:46 +08:00
这我直接 wget 就能下载,查查代码吧。
automation2022
2022-09-09 16:53:03 +08:00
这个应该不难的,我拿 clicknium 练手做了一个例子,供参考,
https://github.com/automation9417/scrapy-bot-collection/tree/main/dpm
barnett2010
2022-09-09 23:45:39 +08:00
@automation2022 感谢大佬。就是想下载全部的 pdf 。我去研究一下你的代码。
barnett2010
2022-09-10 00:13:42 +08:00
不知有没有不需要用到 Visual Studio 软件就能执行的 python 代码
automation2022
2022-09-10 01:00:29 +08:00
@barnett2010 vscode 只是开发工具,执行的时候是不依赖 vscode 的
blankmiss
2022-09-10 01:40:14 +08:00
我很奇怪 请求 总目录的链接 返回的 html 和页面额内容不一样
blankmiss
2022-09-10 01:44:32 +08:00
zoofy
2022-09-13 16:40:57 +08:00
@barnett2010 简单写了个下载 pdf 的 demo, 单纯的 requests 请求. 可以自己优化一下

import requests

headers = {
"Referer": "https://www.dpm.org.cn/Public/static/pdfwrap/js/pdf.worker.js",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33"
}

url = "https://www.dpm.org.cn/Uploads/File/2022/08/29/u630c38230f984.pdf"

resp = requests.get(url, headers=headers)

total_len = int(resp.headers["Content-Length"])

range_int = 65535

loop = total_len // range_int + 1

for i in range(loop):
if i == loop - 1:
exist = True
start = range_int * i + 1
end = total_len
elif i == 0:
exist = False
start = 0
end = range_int
else:
exist = True
start = range_int * i + 1
end = range_int * (i + 1)

headers["Range"] = f"bytes={start}-{end}"

content = requests.get(url, headers=headers).content

if not exist:
with open("a.pdf", "wb") as f:
f.write(content)
else:
with open("a.pdf", "ab") as f:
f.write(content)
barnett2010
2022-09-17 17:44:30 +08:00
@zoofy 感谢大佬。我的 py 版本是 374 。在运行代码时有个这样的提示。
elif i == 0:
^
SyntaxError: invalid syntax
但我看这句完全没错,怎么会有 bug ?
barnett2010
2022-09-17 17:52:47 +08:00
@automation2022
cmd 运行 py app.py
能弹出 chrome 窗口。
但也有个报错

clicknium.common.models.exceptions.UnreachableBrowserExtensionError: The browser's extension is not running, please install or turn on the extension.
automation2022
2022-09-25 19:40:45 +08:00
@barnett2010 cicknium 目前是通过浏览器扩展的方式来操作的(可以通过如下的方式 https://www.clicknium.com/documents/tutorial/extensions/chromeextension ),或者通过脚本的方式安装 https://www.clicknium.com/documents/references/python/webdriver/webextension/install_or_update

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/878746

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX