[英]Python urllib2 URLError exception?
我在Windows XP计算机上安装了Python 2.6.2之前的版本,并运行以下代码:
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>
import urllib2
response = urllib2.urlopen('http://www.python.org/fish.html')
html = response.read()
你这样做是错的。
看一下urllib2源中由traceback指定的行:
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
)。 如果失败,则表示无法解析该名称,因为:
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
>>>
DJ
首先,我认为没有理由导入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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.