2016-07-09 11 views
-2

私はPythonリンク検証プログラムを作っていましたので、指定されたURLのすべてのリンクをスクラップして検証することができました。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「見つかりません」というメッセージが出ないように、彼らは有効なURLであることを意味これは、壊れていない

+0

をあなたが確認するとはどういう意味ですか?そして、どのようなエラーメッセージが表示されますか? – linusg

+0

@linusgループ内に 'mo'を入れても無効な構文だったので、エラーメッセージは表示されませんでした。また、リンクが壊れていないことを確認する手段は、有効なURLであることを意味し、404から「Not Found」というメッセージが表示されないようにします。 –

答えて

2

あなたが好きな正規表現を使用してURLをつかむことができます。

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

urlsあなたにURLのリストが表示されます。

そこから、彼らは行って、壊れていない場合は、リンクを確認できます。

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

本当にありがとうございます。私は正規表現モジュールを使用してURLを取得しようとしていた間、私はnoneTypeオブジェクトを扱っていました。それがなぜ私がこのエラーメッセージを得続けたのかという問題でした! AttributeError: 'NoneType'オブジェクトに 'group'属性がありません。 –

+0

@TonyAhn Glad私は助けてくれました。 –