2015-05-20 2 views
1

Я пытаюсь open список URL-адресов этого формата, используя в Urllib2:Правильный способ исправить URL без HTTP: //

google.com 
facebook.com 
youtube.com 
yahoo.com 
baidu.com 

Используя этот метод:

urllib2.urlopen(url):

И получаю эту ошибку:

File "fetcher.py", line 98, in fetch_urls_and_save 
    response = urllib2.urlopen(url) 
File "urllib2.py", line 154, in urlopen 
    return opener.open(url, data, timeout) 
File "urllib2.py", line 423, in open 
    protocol = req.get_type() 
File "urllib2.py", line 285, in get_type 
    raise ValueError, "unknown url type: %s" % self.__original 

Итак, мой вопрос:

Есть ли способ «исправить» эти URL-адреса, или я должен просто добавить http:// перед каждой строкой? Я не думаю, что это было бы лучшим решением, потому что как насчет URL-адресов, начинающихся с https://?

+1

Просто префикс 'http: //'. Существует сервер, который может говорить HTTP вам, он вернет '200 OK'. Если он хочет поговорить с HTTPS, он перенаправит с помощью '301'. –

+0

Все примеры на этой странице показывают «http: //». https://docs.python.org/2/howto/urllib2.html Lutz правильно, проверьте статус HTTP для перенаправления. –

+0

Вы имеете в виду, что если я получу '301', я должен попробовать' https: // '? Или он будет перенаправлен автоматически? – bmpasini

ответ

4

Я предлагаю просто добавить http:// к строке, так как многие сайты используют автоматический переход схемы https://, перенаправляя запрос.

Вы можете проверить статус, возвращенный urlopen, используя функцию getcode().

a=urllib2.urlopen("http://google.com") 
print a.getcode() # prints 200 
Смежные вопросы