我正在使用Python(2.7)机械化(在Mac上)从expedia.co.uk抓取酒店房间数据,循环浏览大约1000个网址(200家酒店和5个不同时期)的列表。
当我运行代码时,它在前200个工作正常,然后给了我以下错误:
httperror_seek_wrapper:网关超时
从那以后,它总是给我这个错误,我试图从expedia网站加载,虽然从Internet Explorer / Chrome打开相同的网址工作正常。
以下是一个示例代码:
for(var i = 1; i <= 13; i++) { for(var j = 3; j<=33; j+=3 ) { iimPlayCode('TAG POS='+j+' TYPE=DIV ATTR=CLASS:"group_row_labeled" EXTRACT=TXT') var res = iimGetLastExtract(); var result = parseFloat(res.replace(/[a-z]/g, '')); if(j==3) { var firstRes = result; } if(result >= firstRes) { iimDisplay("Highest Number: " + result) } } }
这是追溯:
追踪(最近一次呼叫最后一次):
文件&#34;&#34;,第5行,in r = br.open(url,timeout = 2.0)
文件&#34; build / bdist.macosx-10.5-x86_64 / egg / mechanize / _mechanize.py&#34;,第203行,打开 return self._mech_open(url,data,timeout = timeout)
文件&#34; build / bdist.macosx-10.5-x86_64 / egg / mechanize / _mechanize.py&#34;,第255行,在_mech_open 提出回应
httperror_seek_wrapper:网关超时
我尝试了不同的超时,并使用不同的IP地址,同样的错误。有没有办法解决这个问题?
答案 0 :(得分:1)
我可以使用以下方法消除超时错误:
Min-device-width
如果你打印出一个随机网站的简单请求的机械化标题,你会看到如下内容:
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标头将请求标识为由计算机程序发送的'Python-urllib / 2.7',该网站不赞同。
如果您使用浏览器的开发人员工具,则可以检查浏览器发送到您的网址的请求。在“网络”选项卡下,查看请求标头,您将看到与默认机械化标头不同的标头。在您的机械化请求中,您只需要复制浏览器发送的标头。事实证明,如果您将请求标识为来自浏览器而不是python程序,那么请求将成功,而不会添加浏览器发送的任何其他标头。