ValueError: неизвестный тип URL в urllib2, хотя URL-адрес в порядке, если он открыт в браузере - PullRequest
18 голосов
/ 28 апреля 2011

Обычно я пытаюсь загрузить URL-адрес с помощью urllib2 в python.

код выглядит следующим образом:

import urllib2
req = urllib2.Request('www.tattoo-cover.co.uk')
req.add_header('User-agent','Mozilla/5.0')
result = urllib2.urlopen(req)

выводит ValueError, и программа выдает URL-адрес впример.Когда я захожу на URL в браузере, он работает нормально.

Есть идеи, как решить проблему?

ОБНОВЛЕНИЕ:

спасибо за БенаДжеймс и что проблема обнаружена => add 'http://'

Теперь вопрос уточнен: возможно ли обрабатывать такие случаи автоматически с помощью какой-либо встроенной функции или мне приходится выполнять обработку ошибок с последующей конкатенацией строк?

Ответы [ 4 ]

30 голосов
/ 28 апреля 2011

Когда вы вводите URL в браузере без протокола, по умолчанию используется HTTP.urllib2 не сделает это предположение за вас;вам нужно поставить префикс http://.

5 голосов
/ 28 апреля 2011

Вы должны использовать полный URL-адрес, включая протокол, а не просто указывать имя хоста.

Правильный URL-адрес будет http://www.tattoo-cover.co.uk/.

1 голос
/ 06 ноября 2018

Вы можете использовать метод urlparse из urllib (Python 3), чтобы проверить наличие схемы адресации (http, https, ftp) и объединить схему в случае ее отсутствия:

In [1]: from urllib.parse import urlparse
    ..: 
    ..: url = 'www.myurl.com'
    ..: if not urlparse(url).scheme:
    ..:     url = 'http://' + url
    ..: 
    ..: url
Out[1]: 'http://www.myurl.com'
0 голосов
/ 22 октября 2013

Вы можете использовать для этого функцию urlparse:

Документация пользователя Python

...