urllib2.urlopen возвращает 404 за страницу, которую может вернуть браузер - PullRequest
2 голосов
/ 02 марта 2011

Предыстория: я работаю над книгой «Программирование коллективного разума» Тоби Сегарана; в частности, пример API Kayak из главы 5.

Я могу перейти с помощью моего браузера (Chrome) на страницу результатов API Kayak (которая полностью XML) здесь: http://www.kayak.com/s/basic/flight?searchid=[searchidhere]&c=999&apimode=1&sid=[sessionidhere]&version=1

(ранее я успешно создал идентификатор сеанса и идентификатор поиска)

Однако, когда я использую

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 голосов
/ 02 марта 2011

Если вы попытаетесь выполнить вышеуказанный запрос и в браузере, вы получите 404, просто они решили отформатировать 404 и отобразить его.Запрос переходит с 302 на 404, и urllib2 делает то же самое.

0 голосов
/ 02 марта 2011

Возможно, ваша проблема связана с файлами cookie.По совпадению я обычно просматриваю сеть без включенных Javascript или Cookies для сайтов, на которых они мне не нужны, и в этом состоянии я нажимал на ссылку.

Без информации JS, Cookies и Referer, я получил 404стр.После включения всех этих функций у меня появилась страница «Истек срок поиска».Чтобы подтвердить свою теорию, я включил JS и Referer и снова щелкнул ссылку, что снова привело меня на страницу 404.

Итак, создайте средство открытия с HTTPCookieProcessor, и проблема должна быть решена.

Привет

0 голосов
/ 02 марта 2011

Наиболее вероятным объяснением является то, что ваш поиск был признан недействительным (устаревшим).Chrome может отображать данные из кэша, попробуйте обновить страницу в Chrome и посмотреть, остались ли результаты.В качестве альтернативы, веб-страница может ожидать ранее сохраненный файл cookie.

...