【问题标题】:I want to test if a list of URLs is valid [closed]我想测试 URL 列表是否有效 [关闭]
【发布时间】:2019-11-27 22:50:32
【问题描述】:

我在 Google 上搜索了一个解决方案,可以读取文本文件中的一堆 URL,并测试每个 URL 是否有效。任何事情,简单或复杂,都很好。更简单可能更好。也许得到 200 响应是要走的路。正如我所说,我测试了一些我在网上找到的脚本,但它们不起作用。有时人们想看看已经尝试过的东西,但我认为发布不起作用的东西没有任何意义。

作为奖励,我想知道是否有一种方法可以遍历浏览器中的所有书签,特别是 Firefox,并测试所有 URL 是否有效。我不确定这是否可行,但这将是一个不错的选择!

TIA 大家。

【问题讨论】:

    标签: python python-3.x web url


    【解决方案1】:
    import requests
    
    with open('urls.txt', 'r') as file:
        urls = file.read().splitlines()
    
    for url in urls:
        r = requests.get(url)
        sc = r.status_code
        if sc == 200:
            valid = 'Valid'
        else:
            valid = "Not valid"
        print(f'URL: {url}')
        print(f'Status code: {sc}')
        print(f'{valid}')
    

    urls.txt 每行有一个 URL

    您也可以将 .read().splitlines() 交换为 .readlines(),然后使用 .strip() 循环。

    编辑 1

    对于错误的 url,使用 try/except:

    for url in urls:
        try:
            r = requests.get(url)
            sc = r.status_code
            if sc == 200:
                valid = 'Valid'
            else:
                valid = "Not valid"
            print(f'URL: {url}')
            print(f'Status code: {sc}')
            print(f'{valid}')
        except requests.exceptions.RequestException as e:
            print(f'URL: {url}')
            print('Error')
            print(e)
    

    您可以针对不同的异常进行自定义;看这里:

    https://2.python-requests.org//en/latest/user/quickstart/#errors-and-exceptions

    【讨论】:

    • 谢谢詹姆斯德鲁克。如果所有 URL 都是有效的,那效果很好。如果一个不是实际的 URL,它会关闭并停止。即使遇到错误的 URL,我如何才能让代码一直持续到最后?
    • EDIT1 代码运行良好!非常感谢!!
    【解决方案2】:

    您可以按如下方式在单行中执行此操作:

    [url for url in open('urls.txt').readlines() if requests.get(url.strip()).ok]
    

    请注意,将东西包装在try/except 中可能会更好,因为如果通过requests 完成的许多请求将收到requests.exceptions.ConnectionError 而不是状态码,如果它根本无法到达主机,是无效的网址等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多