Skip to main content
 首页 » 编程设计

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

2025年05月04日8xing901022

背景:我正在阅读 Toby Segaran 的“Programming Collective Intelligence”一书;特别是第 5 章中的 Kayak API 示例。

我可以在此处使用我的浏览器 (Chrome) 导航 到 Kayak API 结果页面(全是 XML):http://www.kayak.com/s/basic/flight?searchid =[searchidhere]&c=999&apimode=1&sid=[sessionidhere]&version=1

(我之前已经成功创建了session ID和search 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% 确定我之前已经对此进行过试验并且它成功运行,但我不知道我哪里出错了。

有人可以帮忙吗?谢谢!

请您参考如下方法:

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

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

因此,使用 HTTPCookieProcessor 构建一个 opener,问题应该得到解决。

问候