【问题标题】:How to check whether a URL is downloadable or not?如何检查 URL 是否可下载?
【发布时间】:2020-08-21 02:24:33
【问题描述】:

如何使用 Python 检查给定的 url 是否可下载?

如果可以下载,它应该返回True,否则返回False

不可下载的网址示例:www.google.com

注意:我不是在谈论 URL 的内容并将其保存为网页。

什么是可下载网址?

如果你重定向到一个 URL 并且如果一个文件开始下载,那么它就是一个可下载的 url

示例: https://drive.google.com/uc?id=1QOmVDpd8hcVYqqUXDXf68UMDWQZP0wQV&export=download

注意:下载的是stackoverflow 2019年度调查数据集。

【问题讨论】:

  • 您好,我认为如果您包含您尝试过的内容和一些不起作用的代码并且您需要帮助[with],您将获得更多帮助。还要解释为什么 google 是不可下载的。什么是可下载页面的示例?
  • @CodeCupboard 是对的:什么是“可下载”。事实上,当您访问 www.google.com 时,您会在浏览器中下载大量文件。我认为您的意思是检查请求的 url 的返回类型。我说的对吗?
  • @CodeCupboard 请检查我的编辑
  • @yAzou 请检查我的编辑

标签: python python-3.x url web-scraping python-requests


【解决方案1】:

这可以通过使用流行的请求库来完成

import requests
url = 'https://www.google.com'
headers=requests.head(url).headers
downloadable = 'attachment' in headers.get('Content-Disposition', '')

Content Disposition Header reference

【讨论】:

    【解决方案2】:

    所以我尝试寻找更好的方法,我正在检查的站点链接有点棘手 大多数stackoverflow答案都提到了使用head request来获取响应头,但是我正在检查的站点返回404错误。当我使用get request时,在输出头之前下载了整个文件。我的朋友建议我使用参数@987654321的解决方案@ 并且确实奏效了。

    import requests 
    r = requests.get(link, stream=True)
    print(r.headers)
    

    【讨论】:

      【解决方案3】:

      在 HTTP 协议级别本身,可下载和不可下载 URL 之间没有区别。有一个 HTTP 请求,并且有一个后续响应。响应体可以是二进制文件、HTML、图像等。

      您可以只请求 HTTP 响应标头并查找 Content-Type: 并决定是否将该内容类型视为可下载或不可下载。

      【讨论】:

      • 也检查Content-Disposition
      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多