0

我正在尝试从维基百科获取页面。我已经在我的请求中添加了一个“用户代理”标头。但是,当我使用 urllib2.urlopen 打开页面时,我得到以下页面:错误:无法检索请求的 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”标头传递。如果我需要在此请求中添加任何其他标头,请告诉我。否则,请告知替代解决方案。

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

4

2 回答 2

1

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

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.
于 2012-09-20T07:01:13.093 回答
1

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

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

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

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

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

于 2012-09-20T22:11:32.710 回答