mieki256's diary



2021/09/10(金) [n年前の日記]

#1 [python] Pythonスクリプトを弄ってる

随分昔に書いたPythonスクリプトを発掘して少し弄ってるところ。Requestsモジュールを使ってWebページを取得して、htmlを1行ずつ正規表現でチェックしていって特定のリンクや文字列を取得、てな感じの処理をしているのだけど…。

文字コードの変換でエラー。 :

今までとは違うWebページを取得しようとしたら文字コードの変換でエラーが出て悩んでしまった。どうやら euc-jp で書かれたhtmlを読み込むとutf-8に変換できない場面が発生するようで。今まではutf-8のページを読み込んでいたから不具合に遭遇しなかったのだな…。

    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 として渡すようにしてみたり。

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)

この状態ならリンク先も取得できるようになった。

以上です。

過去ログ表示

Prev - 2021/09 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project