我想用 Python 编写一个下载管理器,比如 JDownloader,它可以为你下载简单的文件。但并非每个文件在文档中都有下载 url。如果文件在文档中“不可见”,我如何获取下载网址?我在互联网上发现,网络嗅探可能有效,但它似乎不是我需要的正确方法。JDownloader 只是检查一下,然后直接找到您需要的内容。这是如何运作的 ?例如:https ://speed.hetzner.de/
顺便说一句,我是初学者。
我想用 Python 编写一个下载管理器,比如 JDownloader,它可以为你下载简单的文件。但并非每个文件在文档中都有下载 url。如果文件在文档中“不可见”,我如何获取下载网址?我在互联网上发现,网络嗅探可能有效,但它似乎不是我需要的正确方法。JDownloader 只是检查一下,然后直接找到您需要的内容。这是如何运作的 ?例如:https ://speed.hetzner.de/
顺便说一句,我是初学者。
查看您的示例页面,它有 3 个指向文件的 href。当您查看 href 时,有时您可以根据扩展名判断它是一个文件。但是,在正常情况下,网站可以进行一些服务器端处理,然后返回一个文件。有时 URL 甚至不是文件,它们指向其他页面。
所以,你有两件事要做。
要执行第二部分,您可以使用 python requests 库来获取内容类型。这是一个小例子:
In [3]: import requests
In [4]: response = requests.head('https://speed.hetzner.de/100MB.bin', allow_redirects=True)
In [5]: response
Out[5]: <Response [200]>
In [6]: response.content
Out[6]: b''
In [7]: response.headers
Out[7]: {'Server': 'nginx', 'Date': 'Tue, 07 May 2019 21:21:28 GMT', 'Content-Type': 'application/octet-stream', 'Content-Length': '104857600'
, 'Last-Modified': 'Tue, 08 Oct 2013 11:48:13 GMT', 'Connection': 'keep-alive', 'ETag': '"5253f0fd-6400000"', 'Strict-Transport-Security': 'ma
x-age=15768000; includeSubDomains', 'Accept-Ranges': 'bytes'}
如果您查看response.headers
此处,您可以看到设置为 的“内容类型” 'application/octet-stream'
。此字段应用于过滤掉文件。为了确定它是否可下载,您还必须查找其他内容类型。获得此过滤列表后,它就是此网页上可下载文件的列表。
请注意,我使用requests.head
的是获取内容类型。使用 HEAD 请求获取有关 URL 的一些元信息。如果您执行 GET/POST,它可能会超时。