我想测试网址列表是否有效

时间:2019-07-19 00:14:33

标签: python python-3.x web url

我已经用Google搜索了一种解决方案,可以读取文本文件中的一堆URL,并测试每个URL是否有效。任何简单或复杂的都可以。简单一点可能更好。也许得到200条回复是必须的。就像我说的,我测试了一些我在网上找到的脚本,这些脚本不起作用。有时人们想看看已经尝试过的东西,但是我认为发布不起作用没有任何意义。

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

TIA大家。

2 个答案:

答案 0 :(得分: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

对于错误的网址,请使用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

答案 1 :(得分:0)

您可以按以下方式单层执行此操作:

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

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