私は BeautifulSoup4 で少し Web スクレイピングを行っていますが、応答のデコードに問題があります。Web サイトからヘッダーが返されます。ヘッダーには次のように記載されています。
コンテンツ タイプ: テキスト/html; charset=ISO-8859-1
したがって、通常は latin1 charset でデコードします。しかし、デコード後、html には次のような行があります。
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
そして今、この行から文字列が正しくデコードされていません。
では、これを処理する通常の方法は何ですか?発信 http ヘッダーにaccept-encoding行を設定したいのですが、それを行う方法が見つかりませんでした。他のオプションは、新しい文字セットを検索して行ごとにデコードすることですが、utf-8 を受け入れるだけで単純に行うことをお勧めします
私はPython3、libray http.clientを使用しています
EDIT1: コード:
import http.client as cl
from bs4 import BeautifulSoup
conn = cl.HTTPConnection('www.amazon.com')
conn.request("GET", '/A-Man-For-All-Seasons/dp/B003TQ1IW6/ref=sr_1_109?s=instant-video&ie=UTF8&qid=1348337540&sr=1-109')
response = conn.getresponse()
content = response.read()
soup = BeautifulSoup(content)
f = open('am.html', 'w')
f.write(soup.prettify())
#i am actually doing this with httplib2 but result is the same
EDIT2: Linux での Beautiful Soup 4 の構成に何か問題があるか、バグのようです。これは機能していますが、BS4 で応答を解析できません:
import httplib2
h = httplib2.Http('.cache')
response, content = h.request(movieLink , headers={'accept-charset': 'latin1'})
content = content.decode('latin-1')
ありがとう、ブラッククナイト。