Python Mechanize:打开url时网关超时,但url在internet浏览器中可以正常打开
我正在使用Python(2.7)mechanize(在Mac上)从expedia.co.uk中抓取酒店房间数据,循环浏览大约1000个url的列表(200家酒店和5个不同的时段) 当我运行代码时,它在前200个小时运行良好,然后给了我以下错误: httperror\u seek\u包装器:网关超时 从那时起,无论我试图从expedia网站加载什么,它总是给我这个错误,尽管从internet explorer/Chrome打开相同的url也可以 下面是一个示例代码: 这是回溯: 回溯(最近一次呼叫最后一次): 文件“”,第5行,在 r=br.open(url,超时=2.0) 文件“build/bdist.macosx-10.5-x86_64/egg/mechanize/_mechanize.py”,第203行,打开 返回self.\u mech\u open(url、数据、超时=超时) 文件“build/bdist.macosx-10.5-x86_64/egg/mechanize/_mechanize.py”,第255行,在打开的 提出回应 httperror\u seek\u包装器:网关超时Python Mechanize:打开url时网关超时,但url在internet浏览器中可以正常打开,python,mechanize,Python,Mechanize,我正在使用Python(2.7)mechanize(在Mac上)从expedia.co.uk中抓取酒店房间数据,循环浏览大约1000个url的列表(200家酒店和5个不同的时段) 当我运行代码时,它在前200个小时运行良好,然后给了我以下错误: httperror\u seek\u包装器:网关超时 从那时起,无论我试图从expedia网站加载什么,它总是给我这个错误,尽管从internet explorer/Chrome打开相同的url也可以 下面是一个示例代码: 这是回溯: 回溯(最近一次呼叫
我尝试了不同的超时,使用不同的IP地址,同样的错误。有什么办法可以解决这个问题吗?我可以使用以下方法消除超时错误:
br.addheaders.append(
('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9')
)
如果您打印出一个随机网站的简单请求的mechanize标题,您将看到如下内容:
import mechanize
br = mechanize.Browser()
br.set_handle_refresh(False)
url = 'http://www.example.com'
r = br.open(url, timeout = 2.0)
request = br.request
print(request.header_items())
--output:--
[('Host', 'www.example.com'), ('User-agent', 'Python-urllib/2.7')]
默认的mechanize标头将请求标识为由计算机程序“Python urllib/2.7”发送,而网站不批准该程序
如果使用浏览器的开发人员工具,则可以检查浏览器发送到url的请求。在“网络”选项卡下,查看请求标头,您将看到与默认mechanize标头不同的标头。在mechanize请求中,只需复制浏览器发送的标题。事实证明,如果您将请求标识为来自浏览器而不是python程序,则请求将成功,而不添加浏览器发送的任何其他头。减慢DoS攻击速度
import mechanize
br = mechanize.Browser()
br.set_handle_refresh(False)
url = 'http://www.example.com'
r = br.open(url, timeout = 2.0)
request = br.request
print(request.header_items())
--output:--
[('Host', 'www.example.com'), ('User-agent', 'Python-urllib/2.7')]