Webスクレイピングとは ※1
ウェブスクレイピング(Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラー(Web crawler) あるいはウェブ・スパイダー(Web spider)とも呼ばれる。
Webサイト上のテキストデータを活用したいけど、APIやCSV等が提供されていないというケースは結構多いですよね。
今回はウェブサイトからテキストデータを取得する方法を紹介をしたいと思います。
RubyのNokogiriというライブラリを使います。
環境構築
構築環境はUbuntu 14.04です。
1 2 3 |
sudo apt-get update sudo apt-get install make ruby ruby-dev zlib1g-dev sudo gem install nokogiri |
1 2 3 4 5 |
ruby -v > ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux] nokogiri -v > # Nokogiri (1.6.6.2) |
という環境が構築できました。
Nokogiriの1.6系のものが入ります。
1.5系まではlibxml2やlibxsltも自分でインストールする必要があったのですが、
libxml2やlibxsltのバージョンの関係で動作しないケースが多々あったみたいです。
1.6系から依存ライブラリを同梱し、Nokogiriのインストール時に環境に合わせてビルドされるようになりました。※2
とりあえず動かしてみる
Yahooファイナンスから日経平均株価のヒストリカルデータを取得し、
CSVとして保存するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
require 'open-uri' require 'nokogiri' require 'csv' url = 'http://stocks.finance.yahoo.co.jp/stocks/history/?code=998407.O' charset = nil html = open(url) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html, nil, charset) csv = "" table = doc.xpath('//table[@class="boardFin yjSt marB6"]') table.search('.//tr[position()>1]').each do |tr| arr = Array.new() tr.search('.//td').each do |td| arr.push(td.text) end csv << arr.to_csv end File.open('export.csv', 'w') do |io| io.write csv end |
1-3行目:
必要ライブラリを読み込み
5行目:
スクレイピング先のURLを指定
7-11行目:
スクレイピング先の文字コードとHTMLの取得
13行目:
取得したHTMLをパースしてDOM化
15-23行目:
必要なデータの取得し、CSV化
必要データの抽出にはxpathで指定する方法※3とcssセレクタ※4で指定する方法の大きく2つの方法があります。上記ではxpath方式を使ってDOMを取得しています。
25-27行目:
CSVファイルの出力
Nokogiriを使ったWebスクレイピングまとめ
Nokogiriを使ったWebスクレイピングは下記プロセスでほとんど対応できるかと。
↓
HTMLの取得
↓
取得したHTMLをDOM化
↓
必要情報の抽出
↓
データの保存
あとは、xpathなりcssセレクタを良い感じに書くこと。
各方式の書き方は下記※3、※4を参考にしてください。
※2 http://qiita.com/suu_g/items/fcf549e16c797a9d7dc0
※3 実際に書くにあたってはこのサイトや、チートシートが大変役に立ちます。
※4 CSSセレクタの基本的な内容はこのサイトとかを参考に。