2012-02-27 22 views
1

ここではPOSTリクエストを送信しており、Pythonでレスポンスを取得しようとしています 問題は、非ラテン文字を歪ませることです。直接リンクで同じページをフェッチすると発生しませんなし検索結果)が、POSTリクエストで文句を言わないリンクここPython POSTリクエストのエンコーディング

を生成することは、私は何をすべきかです:

import urllib 
import urllib2 
url = 'http://donelaitis.vdu.lt/main_helper.php?id=4&nr=1_2_11' 
data = 'q=bus&ieskoti=true&lang1=en&lang2=en+-%3E+lt+%28+71813+lygiagre%C4%8Di%C5%B3+sakini%C5%B3+%29&lentele=vertikalus&reg=false&rodyti=dalis&rusiuoti=freq' 
req = urllib2.Request(url, data) 
response = urllib2.urlopen(req) 
the_page = response.read() 
file = open("pagesource.txt", "w") 
file.write(the_page) 
file.close() 

はいつでも私は

thepage = the_page.encode('utf-8') 

を試してみてください私はこのエラーを取得:私はしようとするたびに

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 1008: ordinal not in range(128) 

変更応答ヘッダのContent-Type:text/htmlの;のcharset = UTF-8、私はやる

response['Content-Type'] = 'text/html;charset=utf-8' 

私が手にこのエラー:

AttributeError: addinfourl instance has no attribute '__setitem__' 

私の質問:レスポンスを編集したり削除したりすることは可能ですか? もしそうでなければ、この問題を解決するもう1つの方法は、ソースをメモ帳++にコピーし、手動でエンコーディングを修正することですか?私はPythonとデータマイニングへの新たなんだ

は、本当にあなたが私なら、私が知っているだろうと期待し、何か間違ったこと

おかげ

答えて

1

2つのことをやってメートル。

thepage = the_page.decode('utf-8') 

そして第二に、あなたは応答にヘッダーを設定したくない、あなたが使用して、リクエストに応じてそれを設定します。第一に、あなたはそれを解読したい、応答をエンコードする必要はありませんadd_header方法:内部文字列 - - とらわれないコーディング

req.add_header('Content-Type', 'text/html;charset=utf-8') 
+0

リクエストにヘッダーを追加すると、検索結果のないページが返されます。 レスポンスヘッダ 'text/html; charset = utf-8'を 'text/html'に変更したいのですが、追加のcharset = utf-8が問題の原因になっている可能性があります。 – Earl

+1

すでに読んだレスポンスのヘッダーを変更するとはどういう意味でしょうか?私は全く理解していません。 –

+0

よく、私は何とかそのエンコーディングラインで応答を取得することを意味します...それは助けることができるか、技術的にすべてでposibbleであることを確認していません – Earl

2

はなぜあなたが望むものからあなたの試みthepage = the_page.decode('utf-8')の代わりencodeはUnicodeにUTF-8でエンコードされたテキストから移動することではありませんか?

+0

私は( 'utf-8')もデコードしようとしましたが、 UnicodeDecodeError: 'utf8'は位置7281-7282のバイトをデコードできません:無効な継続バイト – Earl