【问题标题】:IOError: [Errno socket error] [Errno 11004] getaddrinfo failed when I'm trying to open a urlIOError: [Errno socket error] [Errno 11004] getaddrinfo 在我尝试打开 url 时失败
【发布时间】:2016-11-22 23:00:06
【问题描述】:

我正在尝试在我的新工作中使用 Python 进行网络抓取,使用的方法与我在之前的 2 个工作中使用的方法相同,但它现在不起作用。这是代码-

import urllib
from urllib import urlopen
url = 'http://www.google.com'
html = urllib.urlopen(url).read()

错误是这样的-

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    html = urllib.urlopen(url).read()
  File "C:\Users\NREARDO2\AppData\Local\Continuum\Anaconda2\lib\urllib.py", line 87, in urlopen
    return opener.open(url)
  File "C:\Users\NREARDO2\AppData\Local\Continuum\Anaconda2\lib\urllib.py", line 213, in open
    return getattr(self, name)(url)
  File "C:\Users\NREARDO2\AppData\Local\Continuum\Anaconda2\lib\urllib.py", line 350, in open_http
    h.endheaders(data)
  File "C:\Users\NREARDO2\AppData\Local\Continuum\Anaconda2\lib\httplib.py", line 1053, in endheaders
    self._send_output(message_body)
  File "C:\Users\NREARDO2\AppData\Local\Continuum\Anaconda2\lib\httplib.py", line 897, in _send_output
    self.send(msg)
  File "C:\Users\NREARDO2\AppData\Local\Continuum\Anaconda2\lib\httplib.py", line 859, in send
    self.connect()
  File "C:\Users\NREARDO2\AppData\Local\Continuum\Anaconda2\lib\httplib.py", line 836, in connect
    self.timeout, self.source_address)
  File "C:\Users\NREARDO2\AppData\Local\Continuum\Anaconda2\lib\socket.py", line 557, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
IOError: [Errno socket error] [Errno 11004] getaddrinfo failed

这是因为我在一家企业集团工作,并且有一个安全协议阻止我这样做,还是有其他方法可以绕过它?

【问题讨论】:

标签: python urllib


【解决方案1】:

根据Windows Sockets Error Codes - MSDN,错误11004表示:

WSANO_DATA 11004

有效名称,没有请求类型的数据记录。

请求的名称有效并且已在数据库中找到,但它没有要解析的正确关联数据。这 通常的例子是主机名到地址的转换尝试 (使用gethostbynameWSAAsyncGetHostByName)使用DNS (域名服务器)。返回一条 MX 记录但没有 A 记录——表明主机本身存在,但不直接 可达。

就人类而言,这意味着您的主机名(从 URL 中提取)在格式方面是有效的,但无法解析为有效的 IP。

在其他问题(1,2,3,4,5)中,人们报告有此问题,如果他们:

  • 在其hosts 文件中将名称映射到无效 IP(如 0.0.0.0
  • URL 格式不正确(例如忘记file:/// 中的第三个斜线或输入错误的 IP)
  • 使用无法解析的 DNS 名称
  • http_proxy环境变量或注册表proxy settings指向一个不存在的主机(如果代理设置或代理有其他问题,它们会导致另一个错误,而不是这个)

在你的情况下,2)(也可能是 4)是没有问题的,所以检查其他的:如果你可以 resolve the name with nslookupif it's present in hosts

【讨论】:

  • 我没听懂你在说什么。你能给我一些代码或程序来确定如何解决这个问题吗?
  • 嗨告诉你:检查你的域名服务器。看起来你在你的盒子上遇到了配置问题。例如。通过从 cmd 内部运行 nslookup 到 google
  • @NickReardon 我添加了一些操作指南链接,请阅读这些内容以获取更多信息。要点是:问题在您的代码之外,很可能是您的机器和/或公司网络配置造成的。您可以按照建议进行诊断,以找出具体问题所在以及您可以采取的措施。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多