2016-07-09 50 views
-2

我正在制作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())) 

它说“莫”部分有无效的语法,所以我甚至不能测试它... :(

,并验证手段确保该链路中断,这意味着它们是有效的网址,这样我们就不会从他们那里404“未找到”消息

+0

你是什么意思与验证?你会得到什么错误信息? – linusg

+0

@linusg我没有收到错误消息,因为在循环中放置'mo'是无效的语法。并验证手段,以确保链接不被破坏,这意味着他们是有效的网址,以便我们不会从他们收到404“未找到”消息。 –

回答

2

您可以使用正则表达式像抢网址:

urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[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)) 
+0

真的很感谢你的评论。我正在处理noneType对象,而我试图通过使用正则表达式模块来获取网址。这就是为什么我不断收到这个错误信息的问题! AttributeError:'NoneType'对象没有属性'group' –

+0

@TonyAhn很高兴我有帮助。 –