我怎样才能从网页上下载文件的链接而不必刮去文件本身?

2024-04-26 01:34:15 发布

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

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

顺便说一句,我是初学者


Tags: 文件文档https网络url管理器de互联网
1条回答
网友
1楼 · 发布于 2024-04-26 01:34:15

查看示例页面,它有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'的“内容类型”。此字段应用于筛选出文件There are other content types您必须查找,以确定它是否是可下载的。一旦你有了这个过滤列表,它就是这个网页上可下载文件的列表

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

相关问题 更多 >

    热门问题