正規表現を使用してWebページを検索しようとしていますが、次のエラーが表示されます。
TypeError:バイトのようなオブジェクトでは文字列パターンを使用できません
Urllib.request.urlopen()がバイトストリームを返す理由を理解しているので、少なくとも推測では、使用するエンコーディングがわかりません。この状況で私は何をすべきでしょうか? urlrequestでエンコード方法を指定する方法はありますか、それとも自分で文字列を再エンコードする必要がありますか?もしそうなら、私は何をしようとしているのか、ヘッダー情報からエンコードを読み取るか、HTMLで指定されている場合はエンコードタイプを読み取ってからそれを再エンコードする必要があると思いますか?
通常は最後の値であるContent-Type
ヘッダーを使用して、応答をデコードするだけです。 チュートリアル にも例があります。
output = response.decode('utf-8')
私にとっては、解決策は次のとおりです(python3):
resource = urllib.request.urlopen(an_url)
content = resource.read().decode(resource.headers.get_content_charset())
requests の場合:
import requests
response = requests.get(URL).text
私は過去2日間同じ問題を抱えていました。私は最終的に解決策を持っています。私はinfo()
によって返されるオブジェクトのurlopen()
メソッドを使用しています:
req=urllib.request.urlopen(URL)
charset=req.info().get_content_charset()
content=req.read().decode(charset)
urllib.urlopen(url).headers.getheader('Content-Type')
このようなものを出力します:
text/html; charset=utf-8