2016-07-09 48 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很高興我有幫助。 –