2016-03-07 2274 views
1

所以,我的代码只有4行。我试图连接到一个网站,然后我试图做的是无关紧要的,因为没有其他代码就会出现错误。urllib.error.URLError:<urlopen错误[Errno 11002] getaddrinfo失败>?

import urllib.request 
from bs4 import BeautifulSoup 

html=urllib.request.urlopen('http://python-data.dr-chuck.net/known_by_Fikret.html').read() 
soup=BeautifulSoup(html,'html.parser') 

和错误(简洁概括一个):

for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 
socket.gaierror: [Errno 11002] getaddrinfo failed 
During handling of the above exception, another exception occurred: 
urllib.error.URLError: <urlopen error [Errno 11002] getaddrinfo failed> 

这是我都试过了。

  1. 我搜索返回的错误“的urlopen错误[错误11002]”在谷歌,尤其是对计算器,没有什么有用的返回(事实上,有没有这个错误11002多有人问)。
  2. 所以然后我尝试用另一个网站“http://www.pythonlearn.com/code/urllinks.py”替换网站参数(即“http://python-data.dr-chuck.net/known_by_Fikret.html”),并且它工作得很好,没有错误出现。这个特定的网站本身,这个网站有些动态,我的意思是它的内容会改变,变成另一个完全不同的东西,但我没有更多知识不仅仅是为了描述我所看到的。

和错误的时间更长,完整版:

Traceback (most recent call last): 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 1240, in do_open 
h.request(req.get_method(), req.selector, req.data, headers) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 1083, in request 
self._send_request(method, url, body, headers) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 1128, in _send_request 
self.endheaders(body) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 1079, in endheaders 
self._send_output(message_body) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 911, in _send_output 
self.send(msg) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 854, in send 
self.connect() 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 826, in connect 
(self.host,self.port), self.timeout, self.source_address) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\socket.py", line 693, in create_connection 
for res in getaddrinfo(host, port, 0, SOCK_STREAM): 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\socket.py", line 732, in getaddrinfo 
for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 
socket.gaierror: [Errno 11002] getaddrinfo failed 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
File "D:/baiduyundownload/Tempo/Active/Python/Python Examples/Fileanalysis11111.py", line 4, in <module> 
html=urllib.request.urlopen('http://python-data.dr-chuck.net/known_by_Fikret.html').read() 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 162, in urlopen 
return opener.open(url, data, timeout) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 465, in open 
response = self._open(req, data) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 483, in _open 
'_open', req) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 443, in _call_chain 
result = func(*args) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 1268, in http_open 
return self.do_open(http.client.HTTPConnection, req) 
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 1242, in do_open 
raise URLError(err) 
urllib.error.URLError: <urlopen error [Errno 11002] getaddrinfo failed> 

回答

2

这意味着要么你的DNS系统不能正常工作,或者你必须使用一个代理在网络上并没有定义正确。

如果您需要使用代理服务器,请将环境变量HTTP_PROXY(和可选的HTTPS_PROXY)设置为网络的正确配置。格式为http://proxy.example.com:80;如果你的代理需要一个用户名和密码,你应该通过它,像这样:http://username:[email protected]:80

对于DNS问题,请尝试从命令行查找域。打开命令提示符并键入nslookup python-data.dr-chuck.net并查看它是否返回给您一个IP地址。

+0

问题解决了。而且我不得不提及,我在中国,而我试图连接的网站被臭名昭着的GFW封锁。我打开灯笼(代理软件之一来绕过审查。)并添加环境变量,如你所建议的。它的工作原理虽然有点落后。认为这可能会帮助像我这样的中国人。 –

2

这是DNS的问题;显然你的python程序无法解析你提供的URL的主机名。也许DNS在其运行的主机上配置错误?

此外,我可以推荐使用请求库吗?这是一个更好,更容易使用的模块来做网络请求。你会在这里找到它:https://pypi.python.org/pypi/requests

相关问题