2

次のPythonコードを使用してhttp://groupon.cl/descuentos/santiago-centroのhtmlコードを取得しようとしています。

import urllib.request
url="http://groupon.cl/descuentos/santiago-centro"
request = urllib.request.Request(url, headers = {'user-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'})
response = urllib.request.urlopen(request)
return response.read().decode('utf-8')

場所を尋ねるページのhtmlコードを取得しています。ブラウザで同じリンクを手動で開くと(最近インストールされたブラウザでもCookieは含まれていません)、割引プロモーションのあるページに直接移動します。urllibでは実行されないリダイレクトアクションのようです。私はuser-agentヘッダーを使用して、一般的なブラウザーの動作を取得しようとしていますが、運がありません。

ブラウザと同じHTMLコードを取得するにはどうすればよいですか?

4

1 に答える 1

1

私はあなたがこのコマンドを実行できると思います:

wget -d http://groupon.cl/descuentos/santiago-centro

そして、wgetが2つのhttpリクエストを出力し、レスポンスページをファイルに保存するのが表示されます。

 -   HTTP/1.1 302 Moved Temporarily
 -   HTTP/1.1 200 OK

ファイルの内容はあなたが望むhtmlコードでした。

最初の応答コードは302なのでurllib.requst.urlopen、2番目の要求を実行します。しかし、それは最初の応答から取得する正しいCookieを設定しませんでした。サーバーは、2番目の要求を理解できないため、別のページを取得します。

http.clientモジュールは、301または302http応答を単独で処理しません。

import http

conn = http.client.HTTPConnection("groupon.cl")
#do first request
conn.request("GET", "/descuentos/santiago-centro")
print(conn.status)  # 301 or 302
print(conn.getheaders()) # set-Cookie

#get the cookie
headers = ....
#do second request

conn.requesst("GET", "/", headers)
......
......
#Get response page.
于 2012-12-10T14:08:48.227 に答える