18

つまり、「www.yahoo.com/thispage」にアクセスすると、yahooが/thispageを/thatpageにリダイレクトするフィルターを設定しているということです。したがって、誰かが/ thispageにアクセスするたびに、その人は/thatpageにアクセスします。

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

4

4 に答える 4

28

を使用すると、応答オブジェクトの属性でrequestsリダイレクトのリストを取得できます。.historyPython リストを返します。詳細については、ドキュメントを参照してください。

于 2012-11-20T22:03:39.620 に答える
16

リクエストがリダイレクトをたどらないようにするには、次を使用します。

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

実際にリダイレクトされている場合は、r.headers['location']でリダイレクトターゲットの場所を確認できます。

于 2012-11-20T22:06:57.460 に答える
3

受け入れられた答えは正しい最初のオプションですが、場合によっては、サイトがメタ タグを使用してリダイレクトする場合、リダイレクト後に正規リンクも指定されます。この例では、リダイレクトする URL であるhttp://en.wikipedia.org/wiki/Google_Inc_Class_Aをウィキペディアからリクエストしてみます。

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

私はチェックして:

>> request.history
[]

別の方法は、リダイレクト先の URL が含まれているはずの正規の URL を試して取得することです。(ここでも BeautifulSoup を使用していることに注意してください)

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

この特定のケースでリダイレクトされる URL と一致します。明確にするために、これは醜い2番目のオプションですが、他のすべてが失敗した場合は試してみる価値があります.

于 2014-11-25T04:44:27.910 に答える
1

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

彼らが前者を行う場合、requestsそれを透過的に処理します。正常なエラー ページ リダイレクトには、エラー ステータス コード (404 など) が含まれていることに注意してください。これは として確認できますresponse.status_code

于 2012-11-20T22:05:51.240 に答える