2012-11-20 3 views
8

「www.yahoo.com/thispage」に行き、yahooが/ thispageを/ thatpageにリダイレクトするフィルタを設定しているということです。誰かが/ thispageに行くたびに、/ hepageに着陸します。サイトをチェックするためにpythonリクエストを使用すると、サイトが別のページにリダイレクトされた場合、わかりますか?

httplib/requests/urllibを使用している場合、リダイレクトがあったことはわかりますか?どのようなエラーページですか? 一部のサイトでは、ページが見つからない場合に/ errorpageにユーザーをリダイレクトします。

+2

解決しようとしている問題は何ですか?あなたのコードはどうやって正しいことをしていませんか?エラーモードについて知りたいだけなら、この動作を自分でテストしてください。 – Marcin

+1

を確認してください。http://stackoverflow.com/questions/554446/how-do-i-prevent-pythons-urllib2-from-following-a-redirect – OneOfOne

+0

@Marcin私には、巨大なリスト(1k +)のアップされているかどうか。私は無作為に40〜50を手動でテストするように選択しました。ページが見つからないとエラーページにリダイレクトされることがあります。また、URLパターンが変更されたため、多くのURLがリダイレクトされていることがわかりました。 – iCodeLikeImDrunk

答えて

13

requestsとすると、レスポンスオブジェクトの.history属性のリダイレクトのリストが表示されます。 Pythonのリストを返します。詳細については、documentationを参照してください。

1

どのようにリダイレクトを行っているかによって異なります。 「正しい」方法は、リダイレクトされたHTTPステータスコード(301/302/303)を返すことです。 「間違った」方法は、リフレッシュメタタグをHTMLに配置することです。

前者の場合、requestsはそれを透過的に処理します。正常なエラーページリダイレクトにはエラーステータスコード(例:404)が表示され、response.status_codeとして確認できます。以下のリダイレクトからの要求を防止するために

9

使用します。

r = requests.get('http://www.yahoo.com/thispage', allow_redirects=False)

それは確かにリダイレクトしている場合は、[「場所」] r.headersにリダイレクト先を確認することができます。

1

最初の正しいオプションは正しい回答ですが、メタタグを使用してサイトがリダイレクトされると、リダイレクトされた正規のリンクも指定されることがあります。この例では、リダイレクトするURLであるwikipediaからhttp://en.wikipedia.org/wiki/Google_Inc_Class_Aをリクエストしようとしています。

>> request = requests.get('http://en.wikipedia.org/wiki/Google_Inc_Class_A') 

私がチェックして:

>> request.history 
[] 

代替がしようとするとうまくいけば、あなたがにリダイレクトされているものを持っていなければならない正規のURLを引っ張っています。 (ここではBeautifulSoupも使用しています)

>> soup = BeautifulSoup(request._content) 
>> canonical = soup.find('link', {'rel': 'canonical'}) 
>> canonical['href'] 
'http://en.wikipedia.org/wiki/Google' 

この特定のケースでリダイレクトされるURLに一致します。だから、明らかにするには、これは醜い第二の選択肢ですが、他のすべてが失敗した場合は試してみる価値があります。

+0

将来の読者のために:この例をチェックしたところ、履歴は正しく設定されています: 'requests.get( 'http://ja.wikipedia.org/wiki/Google_Inc_Class_A'、allow_redirects = True)'。私はそれが "allow_redirects"パラメータか、要求パッケージの新しいバージョンに起因するかどうかわかりません。 – boh

関連する問題