2021/09/10(金) [n年前の日記]
#1 [python] Pythonスクリプトを弄ってる
随分昔に書いたPythonスクリプトを発掘して少し弄ってるところ。Requestsモジュールを使ってWebページを取得して、htmlを1行ずつ正規表現でチェックしていって特定のリンクや文字列を取得、てな感じの処理をしているのだけど…。
◎ 文字コードの変換でエラー。 :
今までとは違うWebページを取得しようとしたら文字コードの変換でエラーが出て悩んでしまった。どうやら euc-jp で書かれたhtmlを読み込むとutf-8に変換できない場面が発生するようで。今まではutf-8のページを読み込んでいたから不具合に遭遇しなかったのだな…。
問題が発生しているのは丸数字(丸付き数字)らしい。本来、euc-jp に丸数字は存在しないらしいのだけど、読み込んだWebページに何故か丸数字が入ってる時があって、そこでエラーが出る模様。
解決策をググったら以下のページに遭遇。
_[python3] EUC-JPなのにShift-JISの機種依存文字が入っててUTF-8にできなかったときの対策 - Qiita
_pythonで丁寧な文字コード変換 - シコウサクゴ()
euc_jp 以外に、euc_jis_2004 や euc_jisx0213 もあるのか…。euc_jis_2004 を指定してみたらエラーが出なくなった。助かった。
r = requests.get(uri) s = r.content.decode("euc_jp")
問題が発生しているのは丸数字(丸付き数字)らしい。本来、euc-jp に丸数字は存在しないらしいのだけど、読み込んだWebページに何故か丸数字が入ってる時があって、そこでエラーが出る模様。
解決策をググったら以下のページに遭遇。
_[python3] EUC-JPなのにShift-JISの機種依存文字が入っててUTF-8にできなかったときの対策 - Qiita
_pythonで丁寧な文字コード変換 - シコウサクゴ()
euc_jp 以外に、euc_jis_2004 や euc_jisx0213 もあるのか…。euc_jis_2004 を指定してみたらエラーが出なくなった。助かった。
◎ User Agentやrefererを指定。 :
html内のリンクを辿って、その先のリンク先を取得しようとしたら403になった。原因をググってみたら、User Agent を見て一般的なブラウザ以外は弾くサイトや、referer を指定しないとファイルを取得できないサイトもあるとのことで。
requests.get() に headers を渡してやれば、そのあたりの情報を渡せる模様。Firefox の User-Agent を調べておいて、その文字列を渡すようにしてみたり、元ページのURLを referer として渡すようにしてみたり。
この状態ならリンク先も取得できるようになった。
requests.get() に headers を渡してやれば、そのあたりの情報を渡せる模様。Firefox の User-Agent を調べておいて、その文字列を渡すようにしてみたり、元ページのURLを referer として渡すようにしてみたり。
uagent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0' ... headers = { 'User-Agent': uagent, 'referer': ref_uri } r = requests.get(uri, headers = headers)
この状態ならリンク先も取得できるようになった。
[ ツッコむ ]
以上です。