我想从维基百科中获取一个页面。我已经为我的请求添加了“User-Agent”标头。但是,当我使用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”标头传递。 如果我需要添加此请求的任何其他标头,请告诉我。否则,请告知其他解决方案。
编辑:请注意,我添加了“User-Agent”标题后,我昨天能够成功获取该页面。今天,我似乎得到了这个错误页面。
答案 0 :(得分: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.
答案 1 :(得分:1)
如果违反他们的crawling rules,维基百科就不会宽恕。当您第一次使用标准urllib2用户代理公开您的IP时,您会在日志中标记。当日志被处理后#39;你的知识产权被禁止了。这应该通过运行另一个IP的脚本来轻松测试。要小心,因为维基百科也被称为阻止IP范围。
IP禁令通常是暂时的,但如果您有多个攻击,可以成为永久禁令。
维基百科也在已知的代理服务器上运行。我怀疑他们是自己解析代理网站(如proxy-list.org)和商业代理网站(如hidemyass.com)的IP。
维基百科这样做当然是为了保护内容免受故意破坏和垃圾邮件的侵害。请尊重规则。
如果可能,我建议您在自己的服务器上使用local copy维基百科。此副本可以违反您的harts内容。