Python Mechanize:Gateway打开url时超时,但url在Internet浏览器中打开正常

时间:2016-07-11 09:45:25

标签: python mechanize

我正在使用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地址,同样的错误。有没有办法解决这个问题?

1 个答案:

答案 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程序,那么请求将成功,而不会添加浏览器发送的任何其他标头。