【问题标题】:Wikipedia | ERROR: The requested URL could not be retrieved维基百科 |错误:无法检索请求的 URL
【发布时间】:2012-09-20 06:51:43
【问题描述】:

我正在尝试从维基百科获取页面。我已经在我的请求中添加了一个“用户代理”标头。但是,当我使用 urllib2.urlopen 打开页面时,我得到以下页面: 错误:无法检索请求的 URL

错误

无法检索到请求的 URL

尝试检索 URL 时遇到以下错误:

  • 拒绝访问。

    访问控制配置会阻止您的请求此时被允许。如果您认为这不正确,请联系您的服务提供商。

这是我用来打开页面的代码:

def get_site(request_user_link,request):                                                    # request_user_link is request for url entered by user
                                                                                            # request is request generated by current page - used to get HTTP_USER_AGENT
                                                                                            # tag for WIKIPEDIA and other sites
    request_user_link.add_header('User-Agent',str(request.META['HTTP_USER_AGENT']))
    try:
        response = urllib2.urlopen(request_user_link)
    except urllib2.HTTPError, err:
        logger.error('HTTPError = ' +str(err.code))
        response=None
    except urllib2.URLError, err:
        logger.error('HTTPError = ' +str(err.reason))
        response=None
    except httplib.HTTPException, err:
        logger.error('HTTPException')
        response=None
    except Exception:
        import traceback
        logger.error('generic exception' + traceback.format_exec())
        response=None
    return response

我将来自当前用户对象的 HTTP_USER_AGENT 的值作为“User-Agent”标头传递给我发送到维基百科的请求。 如果我需要在此请求中添加任何其他标头,请告诉我。否则,请告知替代解决方案。

编辑:请注意,在添加“User-Agent”标头后,我昨天能够成功获取该页面。今天,我似乎收到了这个错误页面。

【问题讨论】:

  • 你在代理服务器后面吗?
  • 不,我不在代理服务器后面

标签: python django urllib2 wikipedia


【解决方案1】:

如果违反他们的crawling rules,维基百科不是很宽容。当您第一次使用标准 urllib2 用户代理公开您的 IP 时,您在日志中被标记了。当日志被“处理”时,您的 IP 被禁止。这应该可以通过为另一个 IP 运行脚本来轻松测试。请小心,因为众所周知,维基百科也会阻止 IP 范围。

IP 禁令通常是暂时的,但如果您有多项违规行为,它可能变成永久性的。

维基百科也对已知的代理服务器进行了自动禁止。我怀疑他们是自己解析匿名代理网站(如proxy-list.org)和商业代理网站(如hidemyass.com)的IP。

维基百科这样做当然是为了保护内容免受破坏和垃圾邮件。请尊重规则。

如果可能,我建议在您自己的服务器上使用维基百科的local copy。您可以将此副本违反您的 harts 内容。

【讨论】:

    【解决方案2】:

    我写了一个从维基百科读取的脚本,这是一个简化版本。

    import urllib2
    opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', 'Mozilla/5.0')] #wikipedia needs this    
    resource = opener.open(URL)
    data = resource.read()
    resource.close()
    #data is your website.
    

    【讨论】:

    • 如果您的代码具有攻击性 - 维基百科可能阻止了您的 IP。检查您是否可以手动浏览维基百科。
    • 我可以浏览维基百科。我试图访问的链接是en.wikipedia.org/wiki/Muhammad_Ali_Jinnah,现在已被阻止。同样,我无法访问页面en.wikipedia.org/wiki/Muhammaden.wikipedia.org/wiki/Ali(没有链接en.wikipedia.org/wiki/Jinnah,所以我无法尝试)。我无法在浏览器中打开这些页面或 ping 它们。但是,我可以从维基百科访问其他页面(所以我假设我的 IP 没有被阻止)。我也向我的互联网服务提供商提出了这个问题,以检查页面是否由于某种原因被阻止。
    • 还请注意,我也可以使用此代码打开其他维基百科页面(至少现在是这样)。只有上面的链接似乎被维基百科屏蔽了,这使得它有点奇怪。
    • 我可以访问en.wikipedia.org/wiki/Muhammad_Ali_Jinnah 没问题。一定是发生了什么奇怪的事情。我不知道该告诉你什么。
    • 请不要尝试冒充浏览器。相反,您应该使用custom User-Agent with some contact information
    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 2017-11-16
    • 2018-05-27
    • 2014-11-14
    • 2022-10-01
    • 2016-06-03
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多