はてなブログの読者一覧でスクレイピング
記事の投稿が途切れてしまいました。 これからは連投にはこだわらないでマイペースで行くことになります。
今回は、いま取り組んでいる、読者一覧のスクレイピングについ紹介したいと思います。
目的
「読者ブログの概要」にある読者数の右横の読者一覧を見るをクリックすると、「このブログの読者」のページが表示されて読者の一覧を見ることが出来ます。最近はずぅ〜っと毎日読者の方達のブログを訪れるようにしています。これによってアクセス数アップに貢献し、自分も色んな事を知れて一石二鳥です。現在、私の読者は140人ほどですが、全部訪れていると時間が掛かっています。何とかこれを効率的にしたいと思ったのが発端です。
今回の目的は、この読者一覧をプログラムで抜き出して更新された読者のブログを見つけること。更新された読者のみを見に行けば、時間はかなり節約できるかと思います。意外と更新の間が空いている方達も多いので…。
このプログラムを実行すると私も楽になりますが、読者の皆さんのブログのアクセス数が+1されるという、読者の方にとってもおいしい話です。
スクレイピング
今回のようにウェブサイトから情報を抽出する技術をWeb scraping(ウェブスクレイピング)といいます。使っているのはpythonで、必要なモジュールはrequest、HTML.parser、そしてcsvです。今回は細かい技術的なことは面白くないでしょうからパスします。
目的の読者一覧を取り出し記事のページを読むのに必要な情報を取り出すために必要なページと操作を記します。
調べるページ | 操作内容 |
---|---|
はてなログイン | ログイン |
このブログの読者 | 読者一覧から各ブログのトップURL、読者のIDを取り出す |
以下、読者の数だけ繰り返す | |
読者ブログのトップ | 記事のURL、記事のタイトル、aboutのページURLを取り出す |
読者のabout | 読者のニックネームを取り出したかったが… |
はてなブログでわかったこと
- ブログデザインによって構造はもとよりhtmlの表現方法も異っている。
はてなブログには公式デザインが多数あり、他にPRO
で使えるデザインも豊富にあります。また独自ドメインを使われている場合もあります。なのでhtml構造も違い、同じような表現でもタグの使われ方が違う場合があります。よって一つの項目を取り出すだけでも何通りかの方法を用意しなくてはなりません。
まだ見たことがないブログが多いでしょうから、未知の対策が続くのではないかと思います。
- 読者数が実際よりも1つ多く表示されている。
抜き出した読者を数えてみると(表計算ソフトに取り込んでみると)ブログの概要に表示されている数よりも一つ少なくなっています。「このブログの読者」のページは50人ずつ表示していますので、ページ毎に確認を取ってみました。何度やっても取り出しにモレはありません。いまのところ、「ブログの概要」の数が間違っていると考えています。
- 更新日が一日ズレている場合がある。
これはhtmlの中で日数計算に使われていると思われる日付なのですが、多分、何かのタイミングなのかも知れませんが一日ズレている場合があります。 記事のURLに埋め込まれている日付が正しいと思います。その日付を使えば良いと考えるところですが、必ずしも全ての記事のURLが日付を含んでいるかというとそうではありせん。なので取り出す時の更新日は1日の誤差が有ってもやむを得ないと、今の段階では考えています。
- ニックネームが得られない
読者の型のIDは直接、得られる項目ですが、以外なことにニックネームはhtmlの中からは得られませんでした。 どこかを参照していることはわかるのですが、取り出す方法がわかりません。 ニックネームが一覧に無くても困ることは無いので、このまま行くか…。
- 未来日付の記事がある
未来日なのですが、記事urlの中にある日付を見ると過去日です。 例としてブログ画面では2020-09-07と表示されていますが中身は2017-09-07の記事でした。 何か意図的にされているような気がしますが対処方法わかりません。 無視するか…。
- 独自ドメインの利用者が多い(おまけ情報)
直接関係ないですが、ついでに読者のURLを分類してみました。 hatenablog.comに次いでwwwで始まる独自ドメインを使っておられる方が半数近く居られました。
読者数 | 割合 | |
---|---|---|
hatenablog.com | 66 | 46% |
hatenablog.jp | 9 | 6% |
hateblo.jp | 7 | 5% |
newdomain.xyz | 1 | 1% |
www | 60 | 42% |
ついでのついで、URLの中に日本語を使われているブログも意外と多い(14%)です。
出来具合には少し気になる点がありますが、こんなものかも知れません。 もう少し努力してみようかと思っています。