我想用JDownloader这样的Python编写一个下载管理器,为您下载简单的文件。但并非每个文件在文档中都有下载URL。如果文件在文档中像“不可见”,我如何获得下载URL? 我在互联网上发现网络嗅探可能正在起作用,但这似乎并不是我所需要的。 JDownloader仅需检查一下即可直接找到您需要的内容。这是如何运作的 ?例如:https://speed.hetzner.de/
我是初学者。
答案 0 :(得分:0)
在您的示例页面上,它具有3个指向文件的href。当您查看href时,有时您可以说它是基于扩展名的文件。但是,在正常情况下,网站可以执行一些服务器端处理,然后返回文件。有时,URL甚至不是文件,它们指向其他页面。
所以,您有两件事要做。
要执行第二部分,您可以使用python请求库获取内容类型。这是一个小例子:
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'
的“内容类型”。该字段应用于过滤文件。您必须寻找There are other content types,才能确定它是否可下载。有了此过滤列表后,它就是此网页上可下载文件的列表。
请注意,我正在使用requests.head
来获取内容类型。使用HEAD请求获取有关URL的一些元信息。如果执行GET / POST,则可能会超时。