【问题标题】:Check whether url exists or not without downloading the content using python在不使用python下载内容的情况下检查url是否存在
【发布时间】:2022-01-23 12:38:01
【问题描述】:

我必须使用 python 检查 url 是否存在。我正在尝试使用 requests.get(url) 但它会花费很多时间,因为一旦 get 被击中,文件就会开始下载。我不希望下载文件以检查 url 有效性。这可以用python实现吗?

【问题讨论】:

    标签: python rest http


    【解决方案1】:

    如下所示。有关详细信息,请参阅 HTTP head

    import requests
    urls = ['https://www.google.com','https://www.google.com/you_can_not_find_me']
    for idx,url in enumerate(urls,1):
      r = requests.head(url)
      if r.status_code == 200:
        print(f'{idx}) {url} was found')
      else:
        print(f'{idx}) {url} was NOT found')
    

    输出

    1) https://www.google.com was found
    2) https://www.google.com/you_can_not_find_me was NOT found
    

    【讨论】:

    • 正确的方法是检查404代码并捕获连接和超时异常。有时网站可以在 HEAD 请求中返回 405501,但这并不意味着该路径无效。任何其他错误也不是 url 不存在的可靠证据。
    • @OlvinR​​oght 我同意 - 它可以改进..
    【解决方案2】:

    也许这对你有用?

    import requests
    r = requests.get('https://logos-download.com/wp-content/uploads/2016/10/Python_logo_wordmark.png')
    
    if r.status_code == 200:
        choice = input("File available!\nDownload? Y/N: ").capitalize().strip()
        if choice == 'Y':
            with open('aim.png','wb') as f:
                f.write(r.content)
        else:
            print("Good bye!")
    

    【讨论】:

    • 添加stream=True 参数将是完美的,因此requests 在您明确要求之前不会下载响应正文。您可以在文档中找到更详细的说明:Body Content Workflow。此外,如果任务是将响应正文内容保存到文件中,则可以使用 shutil.copyfileobj()Response.raw 来完成。
    猜你喜欢
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2013-07-11
    • 2021-05-26
    • 2014-12-03
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多