Обработка перенаправлений rss с помощью Python / urllib2 - PullRequest
14 голосов
/ 29 марта 2012

Вызов urrlib2.urlopen по ссылке на статью, выбранную из RSS-канала, приводит к следующей ошибке:

urllib2.HTTPError: Ошибка HTTP 301: HTTP-сервер возвратил ошибку перенаправления, котораяприведет к бесконечной петле.Последнее 30-кратное сообщение об ошибке было: Постоянно перемещено

Согласно документации, urllib2 поддерживает перенаправления.

На Java проблема была решена простым вызовом

HttpURLConnection.setFollowRedirects(true);

Как решить эту проблему с помощью Python?

ОБНОВЛЕНИЕ

Ссылка, с которой у меня возникли проблемы:

http://feeds.nytimes.com/click.phdo?i=8cd5af579b320b0bfd695ddcc344d96c

Ответы [ 2 ]

26 голосов
/ 29 марта 2012

Оказывается, вам нужно включить Cookies.Страница перенаправляется сама после установки куки в первую очередь.Поскольку urllib2 по умолчанию не обрабатывает куки, вы должны сделать это самостоятельно.

import urllib2
import urllib
from cookielib import CookieJar

cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
p = opener.open("http://feeds.nytimes.com/click.phdo?i=8cd5af579b320b0bfd695ddcc344d96c")

print p.read()
9 голосов
/ 07 октября 2013

Ничего плохого в решении @ sleeplessnerd, но это очень, очень немного более элегантно:

import urllib2
url = "/5209939/obrabotka-perenapravlenii-rss-s-pomoschy-python-urllib2"
p = urllib2.build_opener(urllib2.HTTPCookieProcessor).open(url)

print p.read()

На самом деле, если вы посмотрите встроенную документацию по функции CookieJar(), она более-или-less говорит вам сделать так:

You may not need to know about this class: try urllib2.build_opener(HTTPCookieProcessor).open(url)

...