まぁ、つまらないものですが

エンジニニャーの気ままな技術ブログ、日々のログを残してゆきます。

PythonでPixivのランギング情報を取得してSlackに投稿する話

前置き

いや大遅刻を噛ましてしまった… この記事は「横浜医療情報専門学校 AdventCalendar2016」の―― ――何日目だったかな。多分20日ぐらいだったと思うけどこれを書いてるのはクリスマス直前23日のセブイレブンで書いてます。
さて、「WebApi」について一年生向けにまとめようと思ったけど面白みがあまり無かったのでちょうどやってたPythonを用いたスクレイピングについて書こうかと。
Webスクレイピング初心者なので間違いあるかもあったら誰か指摘してくださいな。

www.adventar.org

遅刻したのはFallout4を買ったからではない。要出典いいね? f:id:gakusei200709:20161224135659p:plain
(買ったのは23日の夜だから…これの影響ではないはず…)

スクレイピングとは

クローラーとも言ったりする、早い話がプログラマブルにHTML(Webサイト)を取得して自分がほしい情報を取得することです。
身の回りに使われているものだとgoogle検索ですね。googleは定期的にクローラーを走らせて検索のとき出力する内容を予め取得していきます。

スクレイピングの注意事項

早い話グレーなところがあります。リクエスト間隔など礼儀を守らないとDOS攻撃と扱われますし、実際に特殊事例ですが逮捕者(Librahack事件)なども出てたりするのでマナーなど気にしましょう。

今回の目的

最近弊クラブのSlackに#illustというチャンネルができてPixivのかわわなイラストが連日要出典投稿されています。 そのなかみんなでかわいいイラストチャンネルに増やすために今回はPixivさんのランキング情報を定期的にslackに投稿したいと思います。

今回使うもの

・PhantomJS
ヘッドレス(画面出力がない)Webブラウです。
JavaScriptなども動くためHTMLを読み込んだ後JavaScript経由でAPIを叩いて動的に内容を変えるようなサイトでもちゃんと最終アウトプット状態のHTMLを取得することができます。
インストールはこれを参考にしました。

qiita.com

Selenium
Webテスト自動化するツールです。HTML要素などを指定して取得することができます。

pip install selenium

でインストールします。
Python
言わずもがなですね。

実際の実装

要素を指定するところはXPathという記述方法を用いましたなれると結構楽でした。

出力

f:id:gakusei200709:20161224135413p:plain

まとめ

実際にできたのでこれで弊クラブのイラスト幸福度が上がるはず…
Pythonスクレイピングもあまりやったことがない中も数時間で実装できて非常に簡単でした。
今後もいろいろやっていろんなおもしろBot作っていこうと思いますん。

相互リンク

  • 技術ブログ:ヤモト.tvp
  • 友人氏の技術ブログ 数学ガチ勢がエンジニアになっていく奮闘記