python链接验证程序

时间:2016-07-09 09:19:30

标签: python

我正在制作python链接验证程序,以便我可以废弃给定网址中的所有链接并验证它们。

我试图在for循环中使用re模块,结果证明它是无效的语法。

但我真的无法想出其他方法可以取出所有链接并检查每一个链接..所以我需要帮助。

以下是代码:

import requests, bs4,webbrowser, re
from selenium import webdriver

url = str(input())
res = requests.get(url)

try:
    res.raise_for_status()
except Exception as err:
    print('There was a probelm with the first url: %s' % (err))

soup = bs4.BeautifulSoup(res.text, "html.parser")
linkElems = soup.select('a')
hrefRegex = re.compile(r'^"http(s)?://.*?"')
mo = hrefRegex.search(linkElems)
for i in range (len(linkElems[i])
    mo = hrefRegex.search(linkElems[i])
    res = requests.get(mo.group())
        if res.status_code != requests.codes.ok:
                print('%s is broken link. Response: 404 "Not Found"' % (mo.group()))

它说' mo'部分语法无效,所以我甚至无法测试它...... :(

并验证确保链接未被破坏的方法,这意味着它们是有效的网址,这样我们就不会得到404" Not Found"来自他们的消息。

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式抓取网址,如:

urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', res.text)

urls会为您提供网址列表。

从那里,您可以通过执行以下操作来验证链接:

for url in urls:
    res = requests.get(url)
    if res.status_code != requests.codes.ok:
        print('{0} is a broken link. Response: 404 Not Found'.format(url))