2016-03-18 29 views
0

Yönetdiğim geniş bir makale koleksiyonunun kalitesini sağlamak için Python 3.4 kullanarak bozuk bir bağlantı denetleyicisi yapıyorum. Başlangıçta, bir bağlantının uygulanabilir olup olmadığını kontrol etmek için GET istekleri kullanıyordum, ancak kontrol ettiğim URL'lere ping atarken mümkün olduğunca güzel olmaya çalışıyorum. Bu nedenle, her ikisinin de daha fazla çalıştığı için test edilen bir URL'yi kontrol etmediğimi garanti ediyorum. bir kereden fazla ve sadece kafa talepleri yapmaya teşebbüs ettim. Ancak, bunun sadece durmasına neden olan bir site buldum. Bu ne bir hata atar, ne de açılır:Broken Link Checker Başarısız Oldu Baş İstekleri

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

bağlantı kendisi tamamen işlevseldir. İdeal olarak benzer bağlantıları işlemek için bir yol bulmak istiyorum. bir hata atmak değil gibi gerçekten tüm denetleyicisi durduruldu bağlantıya aşağı daralma ötesinde daha da bu sorunların nasıl bilmiyorum

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 Bu kod sorunu yeniden olacaktır. Bu bağlantının geçerli olup olmadığını nasıl kontrol edebilirim?

+0

Kopuk bir bağlantı olarak ne tanımlarsınız? Hata 404? –

+0

404, 502, 504, 403, Zaman aşımı hatası ... temel olarak 200'den fazla herhangi bir yanıt kodu. Bir tarayıcıda erişildiğinde sayfanın yükleneceğini tanımlayabilirsem, yapmam gereken tek şey budur. Bağlantının başka bir şekilde doğru olduğunu anlamasını bekleyemem. –

+0

Eğer yardımcı olursa, https: // www.icann.org/'istekleri asılıyor ... garip –

cevap

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