Python urllib2 Исключение URLError?

Я установил Python 2.6.2 ранее на компьютере под управлением Windows XP и выполнил следующий код:

import urllib2 import urllib page = urllib2.Request('http://www.python.org/fish.html') urllib2.urlopen( page ) 

Я получаю следующую ошибку.

 Traceback (most recent call last):<br> File "C:\Python26\test3.py", line 6, in <module><br> urllib2.urlopen( page )<br> File "C:\Python26\lib\urllib2.py", line 124, in urlopen<br> return _opener.open(url, data, timeout)<br> File "C:\Python26\lib\urllib2.py", line 383, in open<br> response = self._open(req, data)<br> File "C:\Python26\lib\urllib2.py", line 401, in _open<br> '_open', req)<br> File "C:\Python26\lib\urllib2.py", line 361, in _call_chain<br> result = func(*args)<br> File "C:\Python26\lib\urllib2.py", line 1130, in http_open<br> return self.do_open(httplib.HTTPConnection, req)<br> File "C:\Python26\lib\urllib2.py", line 1105, in do_open<br> raise URLError(err)<br> URLError: <urlopen error [Errno 11001] getaddrinfo failed><br><br><br> 

5 Solutions collect form web for “Python urllib2 Исключение URLError?”

 import urllib2 response = urllib2.urlopen('http://www.python.org/fish.html') html = response.read() 

Ты делаешь это неправильно.

Посмотрите в источнике urllib2 в строке, указанной трассировкой:

 File "C:\Python26\lib\urllib2.py", line 1105, in do_open raise URLError(err) 

Там вы увидите следующий фрагмент:

  try: h.request(req.get_method(), req.get_selector(), req.data, headers) r = h.getresponse() except socket.error, err: # XXX what error? raise URLError(err) 

Таким образом, похоже, что источником является ошибка сокета, а не ошибка, связанная с протоколом HTTP. Возможные причины: вы не в сети, вы находитесь за ограничительным брандмауэром, ваш DNS отключен, …

Все это в стороне от того факта, что, как указал mcandre , ваш код неправильный.

Ошибка разрешения имени.

getaddrinfo используется для разрешения имени хоста ( python.org ) в вашем запросе. Если это не удается, это означает, что имя не может быть разрешено, потому что:

  1. Он не существует или записи устарели (маловероятно, python.org – хорошо зарекомендовавшее себя имя домена)
  2. Ваш DNS-сервер отключен (маловероятно: если вы можете просматривать другие сайты, вы можете получить эту страницу через Python)
  3. Брандмауэр блокирует Python или ваш скрипт от доступа к Интернету (скорее всего, брандмауэр Windows иногда не спрашивает вас, хотите ли вы разрешить приложение)
  4. Вы живете на древнем кладбище вуду. (маловероятно, если это так, вы должны выйти)

Windows Vista, python 2.6.2

Это 404 страница, не так ли?

 >>> import urllib2 >>> import urllib >>> >>> page = urllib2.Request('http://www.python.org/fish.html') >>> urllib2.urlopen( page ) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python26\lib\urllib2.py", line 124, in urlopen return _opener.open(url, data, timeout) File "C:\Python26\lib\urllib2.py", line 389, in open response = meth(req, response) File "C:\Python26\lib\urllib2.py", line 502, in http_response 'http', request, response, code, msg, hdrs) File "C:\Python26\lib\urllib2.py", line 427, in error return self._call_chain(*args) File "C:\Python26\lib\urllib2.py", line 361, in _call_chain result = func(*args) File "C:\Python26\lib\urllib2.py", line 510, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 404: Not Found >>> 

диджей

Во-первых, я не вижу причин для импорта urllib; Я только когда-либо видел, что urllib2 используется для замены urllib полностью, и я не знаю никакой функциональности, полезной для urllib и все же отсутствует в urllib2.

Затем я замечаю, что http://www.python.org/fish.html дает мне 404 ошибку. (Это не объясняет обратную трассировку / исключение, которое вы видите. Я получаю urllib2.HTTPError: HTTP Error 404: Not Found

Обычно, если вы просто хотите сделать выборку по умолчанию для веб-страниц (без добавления специальных HTTP-заголовков, выполнения каких-либо POST и т. Д.), Тогда достаточно:

 req = urllib2.urlopen('http://www.python.org/') html = req.read() # and req.close() if you want to be pedantic 
Python - лучший язык программирования в мире.