はてダますだ

どこにでもいるますだのブログ

対象アメーバブログ全記事のパーマリンク取得スクリプトを作って使って

ひとつ、過去記事全て読みたいなと思ったブログがAmebaのもので、そこそこの記事数があったし読み返したくなる時も今後あるだろうなと思い、全記事の内容を取ってこようと考えたのがきっかけ。ちなみにスクレイピングを行うコードを書いたのはこれが初めて。Pythonでこの長さのコードを書いたのも初めて。

上の記事にあるやり方を参考にさせてもらった。が、 完成 としたものはかなり異なるものに。理由は後述。

$ python3 ameblo_permalink_collector.py ameba_blog_id [--from-latest]

上記が実行方法、下にコードと、実行例(出力例)を。システマ神戸&システマ湊川 ブログ さんをサンプルとして使わせていただいた。デフォルトで最初の記事から(最も古い記事から)順に出力する。 --from-latest オプションを付けて実行することで、その反対、最も最新の記事から過去に遡る順番で出力する。

output.example.txt は長くなったので中略している。

参考にさせていただいたコードは、記事の内容を1テキストファイルに保存することを目的にしている。つまり、Permalinkを取得後、 entryBody といった類の要素からテキストを抽出して保存、できたのだろう、当時は。5年以上前のものなので、今のアメーバブログのページ生成仕様と異なる部分が多く、それを現状のものに置き換えるのはすぐできたが、単純なスクレイピングでは記事内容が取れないように対策されていた。それもいくつも。いちブログサービスで記事のスクレイピング対策をここまでするのかよ、と思いつつ、んー、Seleniumを使うとか複数ThreadでSession変えてとか…。やりようは色々あるのだが面倒だし、よく考えてみたらURLだけで十分だ、ということで現在の結果となるコードがで完成とした。

完成したと書いたが、再設定したゴール(全記事Permalinkの取得)に至るまで 今 動くもの ができた、ということだ。当たり前のことを言っておくが、あなたがこれを見ている時には、既に上述のスクリプトが期待通りに機能しなくなっている可能性は高い。保守するつもりはない。


今やブラウザ自体に「あとで読む」機能がついて、SBMが流行った時の集合知とは、な気分。集合知なんて言葉最近目にしないぞ、今いったいどうなっているのか、はてブの利用者数やその層はどういう具合なのか、気になってはいる。が、全くそこと関係なく自分はこの Instapaper をずっと愛用している。日本のコアユーザーどのぐらいいるのかな。

話が逸れた。最初は Instapaper のAPIを利用して全記事を追加しようとした。だがAPIは「ここでこう使うため」という説明をつけての利用許可をリクエストし、それをヒューマンチェックありで許可された後になって使えるんだと。なのでリクエスト出したんだが反応がない。いいや、APIは使わずに全部ブラウザで開いてBookmarkletで Instapaper に追加することにしよう。つまりは手作業だ。その手作業は当然自動化だ。


保存したい順番に並んだURL1行の先頭に firefox コマンドの実行バイナリ、アプリのディレクトリの中にあるやつね、それを追記。

export PATH="/Applications/Firefox.app/Contents/MacOS:$PATH"
firefox https://ameblo.jp/systema-m-tg/entry-11150872120.html
firefox https://ameblo.jp/systema-m-tg/entry-11153406006.html
firefox https://ameblo.jp/systema-m-tg/entry-11154202149.html
firefox https://ameblo.jp/systema-m-tg/entry-11156211429.html
firefox https://ameblo.jp/systema-m-tg/entry-11157538875.html
firefox https://ameblo.jp/systema-m-tg/entry-11160316504.html
firefox https://ameblo.jp/systema-m-tg/entry-11161055384.html
firefox https://ameblo.jp/systema-m-tg/entry-11162373781.html
firefox https://ameblo.jp/systema-m-tg/entry-11163102598.html
firefox https://ameblo.jp/systema-m-tg/entry-11164849149.html
firefox https://ameblo.jp/systema-m-tg/entry-12731099271.html
firefox https://ameblo.jp/systema-m-tg/entry-12731533602.html
firefox https://ameblo.jp/systema-m-tg/entry-12732943831.html
firefox https://ameblo.jp/systema-m-tg/entry-12733319961.html
firefox https://ameblo.jp/systema-m-tg/entry-12733980012.html
firefox https://ameblo.jp/systema-m-tg/entry-12734622246.html
firefox https://ameblo.jp/systema-m-tg/entry-12735445696.html
firefox https://ameblo.jp/systema-m-tg/entry-12735925325.html
firefox https://ameblo.jp/systema-m-tg/entry-12737079742.html
firefox https://ameblo.jp/systema-m-tg/entry-12738532230.html

これをTerminalにてコピペどん!でFirefoxの新規タブにページが開かれる。

多くのタブで対象ページが開かれたFirefox。左から順に、Instapaperに追加するするBookmarklet(公式の方法)で Save し、タブを閉じ右のタブに移り…、それを繰り返しているキーマクロを流す。

実際にはもっとトロトロ動かしてた、約140のタブで重めのページが開かれていてマシンが高負荷状態だったこともあり、待機時間は10秒に設定していた(上のGIF動画は3秒待機設定)。Saveが完了せずに次のタブに行ってしまうとSave漏れが出るためだ。とはいえ自分はマクロ実行したら終わるまで放置でいい。部屋片付けやら何かしらしてる間に終わった。1ページSaveし次へ、の1サイクルに13秒かかったとして約140サイクル。30分ぐらいかかってたんじゃないかな。

この記事のためにサンプルとしたシステマ神戸のアメブロには約1,000記事あった(すごい)。同じことをするとなると3.5時間ぐらいかかる。ここまで時間かかるのなら寝てる間にやるだろう。興味深い記事が多い。てか、道場通いたいなぁ。