上司から「サイトがマメに更新されてると、Googleの検索エンジンからの評価が上がるらしいんだけどさぁ、 他サイトの更新頻度をチェックしたり簡単に比較する方法ない?」というふんわりした話題がありました。
単純に考えると、サイトのHTMLを定期的にスクレイピングしてdiffを取ればいけそうですが、 商品の入れ替え等で細かい文言が変わってしまうことは容易に考えられます。
そこで、HTML(DOM)の構造のみを取り出して、比較的人が見やすいデータ構造であるyamlに変換することにしました。 調べてみると、既にRubyで似たようなコードを実装した方がいたようです。
これをそのまま使わせて頂いてもよかったのですが、一度Pythonでコマンドラインツールを作ってみたかったのと、 USER-AGENTくらいは指定したかったので再実装しました。
うわ!_stdout_yaml
の中がザ・糞実装みたいな感じですね!
クラスメソッドさんの記事にあったClickというライブラリが簡単そうだったのでそちらを利用しました。 デコレータをちゃんと使ったのは初めてかもしれません…。
# クックパッドのトップページをテキストに書き出す ./honenuki.py --url='http://cookpad.com/' > output
結果はこんな感じです。一応yamlとして読み込めるようにはしたつもりですが、diff取るためだけに出力しているので努力はしてません。
- :name: 'html' - :children: - :name: 'head' - :children: - :name: 'meta' :attributes: :charset: 'utf-8' - :name: 'meta' :attributes: :content: 'IE=edge' :http-equiv: 'X-UA-Compatible' - :name: 'script' - :name: 'link' :attributes: :media: 'handheld' :rel: - alternate :type: 'text/html' :href: 'http://m.cookpad.com/' - :name: 'link'
あとはgit管理して簡単にdiffを見れるようにすればいいだけですが、実際にうまくいくかどうかはやってみないとわからないですね…。