如何从网页上获取文件的下载链接而又不删除文档本身?

时间:2019-05-07 19:19:55

标签: python html http packet-sniffers jdownloader

我想用JDownloader这样的Python编写一个下载管理器,为您下载简单的文件。但并非每个文件在文档中都有下载URL。如果文件在文档中像“不可见”,我如何获得下载URL? 我在互联网上发现网络嗅探可能正在起作用,但这似乎并不是我所需要的。 JDownloader仅需检查一下即可直接找到您需要的内容。这是如何运作的 ?例如:https://speed.hetzner.de/

我是初学者。

1 个答案:

答案 0 :(得分:0)

在您的示例页面上,它具有3个指向文件的href。当您查看href时,有时您可以说它是基于扩展名的文件。但是,在正常情况下,网站可以执行一些服务器端处理,然后返回文件。有时,URL甚至不是文件,它们指向其他页面。

所以,您有两件事要做。

  1. 检索网页上的所有定位标记和href。 (您可以使用 此步骤的BeautifulSoup)
  2. 从html网址中过滤出文件网址。 (这是棘手的部分。您可能会遇到静态资产,例如.js或.css或图像文件等。)

要执行第二部分,您可以使用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,则可能会超时。