urllib2.urlopen返回浏览器可以返回的页面404

时间:2011-03-02 02:04:40

标签: python debugging urllib2

背景:我正在研究Toby Segaran的“编程集体智慧”一书;特别是第5章中的Kayak API示例。

我可以使用我的浏览器(Chrome)导航到Kayak API结果页面(全部是XML):http://www.kayak.com/s/basic/flight?searchid = [searchidhere]和C = 999&安培; apimode = 1&安培; SID = [sessionidhere]&安培;版本= 1

(我之前已成功创建了会话ID和搜索ID)

然而,当我使用

import urllib2
import xml.dom.minidom
url = 'http://www.kayak.com/s/basic/flight?searchid=NQnNrj&c=999&apimode=1&_sid_=19-y2WnyKIGm1FuaLfo2keV&version=1'
doc=xml.dom.minidom.parseString(urllib2.urlopen(url).read())

我得到以下回复

[...discarded top bit of Traceback...]
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found

我已经使用Python 2.5.4和Python 2.7.1进行了测试。我几乎100%肯定我以前已经尝试过这个并且它成功地工作了,我不知道我哪里出错了。

有人可以帮忙吗?谢谢!

3 个答案:

答案 0 :(得分:0)

最可能的解释是您的搜索已失效(过期)。 Chrome可能会显示缓存中的数据,尝试刷新Chrome中的页面并查看结果是否仍然存在。 或者,网页可能需要先前保存的cookie。

答案 1 :(得分:0)

如果您在浏览器中尝试上述查询,您将获得404,只是他们选择格式化404并显示它。请求从302发送到404,urllib2正在执行相同的操作。

答案 2 :(得分:0)

可能您的问题与Cookie有关。 巧合的是,我通常浏览网页时没有为我不需要的网站启用Javascript或Cookies,在这种情况下我点击了链接。

没有JS,Cookies和Referer信息,我得到了404页面。启用所有这些后,我收到了“搜索已过期”页面。为了证实我的理论,我启用了JS和Referer并再次点击了链接,这使我再次进入了404页面。

因此,使用HTTPCookieProcessor构建一个开启者,问题应该解决。

此致