Ошибка значения: неизвестный тип URL-адреса в urllib2, хотя URL-адрес хорош, если открыт в браузере

#python #urllib2 #httprequest

#python #urllib2 #httprequest

Вопрос:

В принципе, я пытаюсь загрузить 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)
  

он выводит ошибку значения, и программа выполняет поиск URL-адреса в примере.
Когда я получаю доступ к URL-адресу в браузере, он работает нормально.

Есть идеи, как справиться с проблемой?

Обновить:

спасибо Бену Джеймсу и почему проблема обнаружена => добавить ‘http: //’

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

Ответ №1:

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

Ответ №2:

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

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

Комментарии:

1. Да, sth, хорошее наблюдение! Итак, следующий вопрос: возможно ли преобразовать неверные URL-адреса в приемлемые с помощью urllib2 с помощью какой-либо встроенной функции, или я должен выполнить обработку ошибок с помощью манипулирования строками (путем объединения ‘http: //’ string ‘/’) самостоятельно

Ответ №3:

Вы можете использовать метод 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'
  

Комментарии:

1. Действительно хотелось бы urllib сделать это автоматически

Ответ №4:

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

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