0

私はPythonを初めて使用し、いくつかの新しいモジュールを学習しようとしています。幸運にも不幸にも、私はurllib2モジュールを手に取り、問題を引き起こしている1つのURLでそれを使い始めました。

まず、Requestオブジェクトを作成してから、応答オブジェクトでRead()を呼び出しました。失敗していました。リダイレクトされていることが判明しましたが、エラーコードはまだ200です。何が起こっているのかわかりません。これがコードです-

def get_url_data(url):
    print "Getting URL " + url
    user_agent = "Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1"
    headers = { 'User-Agent' : user_agent }
    request = urllib2.Request(url, str(headers) )

    try:    
        response = urllib2.urlopen(request)
    except urllib2.HTTPError, e:
        print response.geturl()
        print response.info()
        print response.getcode()
        return False;
    else:
        print response
        print response.info()
        print response.getcode()
        print response.geturl()
        return response

上記の関数をhttp://www.chilis.com "で呼び出しています。

私は301、302、または303を受け取ることを期待していましたが、代わりに200が表示されます。これが表示される応答です-

Getting URL http://www.chilis.com
<addinfourl at 4354349896 whose fp = <socket._fileobject object at 0x1037513d0>>
Cache-Control: private
Server: Microsoft-IIS/7.5
SPRequestGuid: 48bbff39-f8b1-46ee-a70c-bcad16725a4d
X-SharePointHealthScore: 0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 14.0.0.6120
X-MS-InvokeApp: 1; RequireReadOnly
Date: Wed, 13 Feb 2013 11:21:27 GMT
Connection: close
Content-Length: 0
Set-Cookie: BIGipServerpool_http_chilis.com=359791882.20480.0000; path=/

200
http://www.chilis.com/(X(1)S(q24tqizldxqlvy55rjk5va2j))/Pages/ChilisVariationRoot.aspx?AspxAutoDetectCookieSupport=1

誰かがこのURLが何であるか、そしてこれをどのように処理するかを説明できますか?Diveintopython.netの「HandlingRedirects」セクションを使用できることはわかっていますが、そのページのコードでも同じ応答200が表示されます。

編集:DiveintoPythonのコードを使用すると、一時的なリダイレクトが表示されます。私が理解していないのは、コードからのHTTPエラーコードが200である理由です。これが実際のリターンコードではないでしょうか。

EDIT2:よく見えたので、奇妙なリダイレクトではありません。タイトルを編集しています。

EDIT3:urllib2が自動的にリダイレクトに従う場合、次のコードがchilis.comのフロントページを取得しない理由がわかりません。

docObj = get_url_data(url)
doc = docObj.read()
soup = BeautifulSoup(doc, 'lxml')
print(soup.prettify())

ブラウザが最終的にリダイレクトされるURLを使用すると、機能します(http://www.chilis.com/EN/Pages/home.aspx ")。

4

1 に答える 1

2

urllib2自動的にリダイレクトに従うため、表示される情報はリダイレクト先のページからのものです。

リダイレクトに従わない場合は、サブクラス化する必要がありますurllib2.HTTPRedirectHandler。これを行う方法に関する関連するSOの投稿は次のとおりです。Pythonのurllib(2)がリダイレクトをたどらないようにするにはどうすればよいですか。

編集3に関して:www.chilis.comCookieを受け入れる必要があるようです。これはを使用して実装できますが、モジュール(http://pypi.python.org/pypi/requests/urllib2 )をインストールすることをお勧めします。requests

以下は、(エラー処理なしで)あなたが望むことを正確に実行しているようです:

import requests

r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
print(soup.prettify())
于 2013-02-13T12:11:17.607 に答える