wget&grepで簡単クローリング・スクレイピング

f:id:monozukuri-bu:20171005232834j:plain

モノづくり部の山岸です。

本日はクローリング・スクレイピングのネタをご紹介。

複雑なデータをWebから取ってきたい時は
素直にScrapy等の強力な道具を使ったほうがいいと思いますが、
簡単な処理であればUnixコマンドのみでも十分可能です。

というわけで、本日はwgetgrepを使った クローリング・スクレイピングを行ってみましょう。

やりたいこと

ここでは当ブログのaboutページあばうと - Skywill mono-devより
ブログの投稿数を取得することを目標にしたいと思います。 (下画像赤枠部) f:id:monozukuri-bu:20171003021003p:plain

クローリング

クローリングとはクローラーを使ってデータ収集を行うことを言います。
今回はwgethttp://www.sw-mono.blog/aboutをダウンロードするだけで完了です。

wget

$ wget http://www.sw-mono.blog/about

スクレイピング

スクレイピングとは取ってきたデータから情報を抜き出す作業のことです。

ブラウザの開発ツール等で取ってきたい要素を前もって確認しておきましょう。
下の画像ではchromeを用いました。
f:id:monozukuri-bu:20171003022618p:plain

これによりhtmlから<dd>8 記事</dd>の行を取ってくればいいのが分かりますね。

grepで情報を抜き出すには
その行が唯一となる特徴を考える必要がありますので、

数字が可変であるということを考慮に入れ<dd>8 記事</dd>を見てみると、
記事</dd>で特定してあげれば上手くいきそうです。

grep

$ cat about | grep '記事</dd>'
    <dd>8 記事</dd>

狙った行が返ってきてくれましたね。

あとは数字のみを抜き出すためにsed等を使えばいいでしょう。

sed

$ cat about | grep '記事</dd>' | sed -E 's/[^>]*>([0-9]+).*/\1/'
8

当ブログの投稿数が数字のみで返ってきました!

まとめ

Unixコマンドのみでも簡単なクローリング・スクレイピングが出来るので、
Python・Scrapyを使うほどでもない場合はぜひ試してみてください。

以上です。