2016-03-18 4 views
0

Я создаю неисправную проверку ссылок с помощью Python 3.4, чтобы обеспечить качество большой коллекции статей, которыми я управляю. Вначале я использовал запросы GET, чтобы проверить, является ли ссылка жизнеспособной, однако я и стараюсь быть как можно более приятным при проверке URL-адресов, которые я проверяю, поэтому я оба гарантирую, что не проверю URL-адрес, который тестируется как работающий больше чем один раз, и я попытался выполнить просто запросы главы.Broken Link Checker Fails Head Requests

Однако, я нашел сайт, который заставляет его просто остановиться. Оно не выдает ошибку, не открывается:

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

Сама ссылка полностью функционален. Поэтому в идеале я хотел бы найти способ обработки похожих ссылок. Этот код в Python 3.4 будет воспроизвести проблему:

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) 

Поскольку он не выдаст ошибку, я действительно не знаю, как устранить это еще за сужения его к ссылке, которая остановила всю шашку. Как проверить, действительно ли эта ссылка?

+0

Что вы определите как неработающую ссылку? Ошибка 404? –

+0

404, 502, 504, 403, ошибка тайм-аута ... в основном любой код ответа более 200. Если я могу определить, что страница будет загружаться при доступе в браузере, это все, что мне нужно для этого. Я не могу ожидать, что он поймет, что ссылка правильна любым другим способом. –

+0

Если это помогает, любой запрос на 'https: // www.icann.org /', кажется, зависает ... странно –

ответ

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