【Linux】ハテナブログに投稿した記事の一覧を取得する方法

f:id:hira98:20190720210151p:plain

【結論】

【目次】

はじめに

「120日間毎日ブログ投稿したぜ💪」的な記事を出すための下準備として、ハテナブログに投稿した記事のタイトルとURLをスクレイピングで取得しようと思います。

ただし、スクレイピングといってもコードは書きません。

Linuxのコマンドを1回実行するだけです。

ハテナブログの分析

スクレイピングをするには対象サイトのページ構成を把握する必要があります。

ハテナブログでは、記事の一覧は月間アーカイブのリンク先で確認することができます。

f:id:hira98:20190720210621p:plain

記事の一覧表示では、1ページあたりに30記事分のリンクを表示し、次のようなURLのフォーマットになっており、年単位や月単位での一覧表示できます。

https://[アカウント名].hatenablog.com/archive/[年]/[月]?page=[ページ数]

記事一覧に表示される各記事へのリンクは、次のようなフォーマットで記述されています。

<a class="entry-title-link" href="[記事へのリンク]">[記事のタイトル]</a>

ここまで分かれば後はコマンドを実行するだけです。

実行するコマンド

以下のコマンドを実行すると、hira98アカウントが2019年にハテナブログに投稿した記事の一覧をURL,記事のタイトルの形式でhira98.txtファイルに出力してくれます。

seq 12 | xargs -I@ curl https://hira98.hatenablog.com/archive/2019/@?page=1 | grep "entry-title-link" | sed 's/^.*href="\(.*\)">\(.*\)<.*$/\1,\2/' > hira98.txt;seq 12 | xargs -I@ curl https://hira98.hatenablog.com/archive/2019/@?page=2 | grep "entry-title-link" | sed 's/^.*href="\(.*\)">\(.*\)<.*$/\1,\2/' >> hira98.txt

若干使いづらいのでシェル化しようとも考えたのですが、うまく動作しないので諦めました。

個人でしか使わない上に、アカウント名と年を置換すれば流用できるので良しとします。

コマンドの動作確認

念の為、他のアカウントでも試してみました。

以下のアカウントだと、#コメントアウトされた行もヒットしましたが、それを除けば意図した結果を取得できました。

seq 12 | xargs -I@ curl https://ryoutaku-jo.hatenablog.com/archive/2019/@?page=1 | grep "entry-title-link" | sed 's/^.*href="\(.*\)">\(.*\)<.*$/\1,\2/' > ryoutaku-jo.txt;seq 12 | xargs -I@ curl https://ryoutaku-jo.hatenablog.com/archive/2019/@?page=2 | grep "entry-title-link" | sed 's/^.*href="\(.*\)">\(.*\)<.*$/\1,\2/' >> ryoutaku-jo.txt

...因みに本当に欲しかったのは、上記コマンドの実行結果だったりします。

参考情報

sedでダブルクォーテーションの中にある文字列を抽出する - Qiita

Linuxコマンド【 seq 】連続した数字の列を出力・表示 - Linux入門 - Webkaru

xargsコマンドで覚えておきたい使い方・組み合わせ7個(+1個) | 俺的備忘録 〜なんかいろいろ〜

Linuxコマンド【 seq 】連続した数字の列を出力・表示 - Linux入門 - Webkaru

さいごに

以前聞いた、インフラエンジニアの「コマンド実行すればいいでしょ。」発言の意味が少しだけ分かってきた気がします。