Python web scraping:urllib.error.URLError:urlopen错误[Errno 11001] getaddrinfo失败

时间:2017-12-27 07:56:04

标签: python web-scraping urllib

这是我第一次尝试使用Python进行Web抓取。我必须从网站上提取一些信息。我在一家机构工作,所以我使用代理进行互联网访问。

我使用过此代码。哪个适用于例如URL等https://www.google.co.inhttps://www.pythonprogramming.net

但是当我使用这个URL:http://www.genecards.org/cgi-bin/carddisp.pl?gene=APOA1我需要抓取数据时,它会显示

urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed>

这是我的代码。

import urllib.request as req

proxy = req.ProxyHandler({'http': r'http://username:password@url:3128'})
auth = req.HTTPBasicAuthHandler()
opener = req.build_opener(proxy, auth, req.HTTPHandler)
req.install_opener(opener)
conn = req.urlopen('https://www.google.co.in')
return_str = conn.read()
print(return_str)

请指导我这里的问题,我无法理解。 另外,在搜索上述错误时,我会阅读有关绝对URL的内容。这与它有关吗?

2 个答案:

答案 0 :(得分:1)

问题是您的代理服务器和您自己的主机似乎使用了两个不同的DNS解析器,或者在不同时刻更新了两个解析器。

因此,当您传递www.genecards.org时,代理不知道该地址,并且尝试获取地址信息(getAddrInfo)失败。因此错误。

但是,问题比这更令人尴尬。 GeneCards.org是Incapsula DNS主机的别名:

$ host www.genecards.org
www.genecards.org is an alias for 6hevx.x.incapdns.net.

计算机本身就是一个代理,隐藏了真正的GeneCards网站(因此可能使用http://192.230.83.165/作为地址,,它永远不会工作)。

这些旋转木马被那些网站使用,其中包括 - 我该如何设置 - 采取被刮掉的模糊视图

View of Incapsula Network

所以是的,您可以尝试几种方法来进行拼抢工作。 很可能他们只会在关闭越来越难之前的短时间内工作。因此,在最佳情况下,您将被迫不断更新您的抓取代码。只要对您来说最不方便的话,哪个会崩溃。

这不是偶然的:它是GeneCards&#39;部分,并在其服务条款中明确涵盖:

  

滥用服务

     

7.2 LifeMap可能会限制,暂停或终止任何滥用或滥用GeneCards Suite产品的注册用户的帐户。滥用GeneCards Suite产品包括抓取,抓取和/或抓取 GeneCards Suite产品;创建多个或错误的配置文件...

我建议您采取不同的方法 - 尝试查询咨询许可证。刮掉一个不关心(或者不能或者还没有到达)的网站以更简单的格式提供信息是一回事 - 窃取这些信息是完全不同的。< / p>

另请注意,您正在连接到Squid代理,该代理很可能会记录您正在使用的用户名。如果LifeMap提出未经授权的抓取投诉,那么通过该代理进行的任何抓取都会立即追溯到该用户。

答案 1 :(得分:0)

尝试从终端ping url:3128。提供回复?问题似乎与服务器的安全性有关。