我怎样才能从一个网页下载文件链接而不取消文件本身?

2024-06-15 18:55:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python编写一个下载管理器,比如JDownloader,它可以为您下载简单的文件。但并不是每个文件在文档中都有下载url。如果文件在文档中像“看不见的”,我如何获得下载url? 我在互联网上发现,网络嗅探也许是有效的,但它似乎不是我需要的正确的东西。JDownloader只是检查一下,然后直接找到您需要的东西。这是怎么回事?例如:https://speed.hetzner.de/

顺便说一句,我是个初学者


Tags: 文件文档https网络url管理器de互联网
1条回答
网友
1楼 · 发布于 2024-06-15 18:55:39

看看您的示例页面,它有3个指向一个文件的href。当你看a href时,有时你会发现它是一个基于扩展名的文件。但是,在正常情况下,网站可以进行一些服务器端处理,然后返回一个文件。有时URL甚至不是文件,而是指向其他页面。你知道吗

所以,你有两件事要做。你知道吗

  1. 检索网页上的所有定位标记和HREF。(您可以使用 (此步骤的组)
  2. 从html URL中筛选出文件URL。(这是棘手的部分。您可能会遇到静态资产,如.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'的“Content type”。此字段应用于筛选文件。There are other content types您必须查找,以确定它是否可下载。一旦你有了这个过滤列表,它就是这个网页上可下载文件的列表。你知道吗

注意,我正在使用requests.head获取内容类型。使用HEAD请求获取一些关于URL的元信息。如果执行GET/POST,可能会超时。

相关问题 更多 >