2016-03-18 8 views
0

私は管理している大量の記事の品質を保証するために、Python 3.4を使用して壊れたリンクチェッカーを構築しています。最初は私はGETリクエストを使ってリンクが実行可能かどうかを確認していましたが、私がチェックしているURLにpingを出すときにできるだけうまくしようとしていましたので、もっとうまくいっているとしてテストされているURLをチェックしませんかつて私は頭の要求をするように試みました。壊れたリンクチェッカーがヘッドリクエストに失敗する

しかし、これを単純に停止させるサイトが見つかりました。これはどちらもエラーをスローし、また開きます

https://www.icann.org/resources/pages/policy-2012-03-07-en

リンク自体は完全に機能しています。理想的には、同様のリンクを処理する方法を探したいと思います。それがエラーをスローしませんので、私は本当に全体チェッカーを停止し、リンクにそれを絞り込む超え、さらにこれを解決する方法を知らない、

import urllib 
import urllib.request 

URL = 'https://www.icann.org/resources/pages/policy-2012-03-07-en' 
req=urllib.request.Request(URL, None, {'User-Agent': 'Mozilla/5.0 (X11; Linux i686; G518Rco3Yp0uLV40Lcc9hAzC1BOROTJADjicLjOmlr4=) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3','Accept-Encoding': 'gzip, deflate, sdch','Accept-Language': 'en-US,en;q=0.8','Connection': 'keep-alive'}, method='HEAD')>>> from http.cookiejar import CookieJar 
cj = CookieJar() 
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) 
response = opener.open(req) 

:Pythonの3.4でこのコードは、問題を再現します。このリンクが有効かどうかをどうやって確認できますか?

+0

あなたは壊れたリンクとして何を定義しますか?エラー404? –

+0

404,502,504,403、タイムアウトエラー...基本的に200以上のレスポンスコード。ブラウザーでアクセスするとページがロードされることがわかったら、それだけでいいです。リンクが他の方法で正しいことを理解することは期待できません。 –

+0

'https:// www.icann.org /'へのリクエストがハングアップするように見える... strange –

答えて

0
From bs4 import BeautifulSoup,SoupStrainer  
import urllib2  
import requests  
import re  
import certifi  
import ssl  
ssl._create_default_https_context = ssl._create_unverified_context 

def getStatus(url): 
    a=requests.get(url,verify=False) 
    report = str(a.status_code) 
    return report 


alllinks=[] 
passlinks=[] 
faillinks=[] 
html_page = urllib2.urlopen("https://link") 

soup = BeautifulSoup(html_page,"html.parser") 
for link in soup.findAll('a', attrs={'href': re.compile("^http*")}): 
    #print link.get('href') 
    status = getStatus(link.get('href')) 
    #print ('URL---->',link.get('href'),'Status---->',status) 
    link='URL---->',link.get('href'),'Status---->',status 
    alllinks.append(link) 

    if status == '200': 
     passlinks.append(link) 
    else: 
     faillinks.append(link) 


print alllinks 
print passlinks 
print faillinks 
関連する問題