酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Nokogiri を使った Rubyスクレイピング [初心者向けチュートリアル]

プログラム初心者な方向けに始めたRailsチュートリアルシリーズです。今回はRubyでスクレイピングをしたいという人向けに『Nokogiri』というライブラリを使ったスクレイピングのチュートリアルを作ってみました!

(05-02 08:10) 補足: Windowsで初めての人向けの記事を追加


Included file ‘custom/google_ads_yoko_naga.html’ not found in _includes directory

目次

(1) Webスクレイピングとは?
(2) Nokogiriとは?
(3) 最初に読んでおくと捗りそうな記事
(4) Gem Nokogiriのインストール
(5) Yahoo!Japanのトップページからtitleを取得
(6) NaverまとめTechページの注目一覧のタイトル・画像を取得
(7) 実際にコードを書くときに参考になるサイト
(8) Railsへの組み込み

(1) Webスクレイピングとは?

WebスクレイピングとはWebサイトのHTMLデータを収集して、特定のデータを抽出・整形することです。Webスクレイピングの応用例としては次のような場面があります。

* 部分的なコンテンツを抽出して、携帯向けのコンテンツとして使う
* 小見出しを取り出して目次を作成する

参照元: Webスクレイピングとは (Web scraping) ウェブスクレイピング: - IT用語辞典バイナリ

(2) Nokogiriとは?

Nokogiri』とはスクレイピングでよく使われるRubyのライブラリです。特徴は次の通り。

* HTMLやXMLの構造を解析して、特定の要素を指定しやすい形に加工できる
XpathやCSSセレクタを使った要素の抽出を行うことができる

XPathやCSSセレクタの説明は下記サイトがわかりやすかったです!

1.XPath の基本 1 | TECHSCORE(テックスコア)

意外と知らない!?CSSセレクタ20個のおさらい

(3) 最初に読んでおくと捗りそうな記事

http://www.engineyard.co.jp/blog/2012/getting-started-with-nokogiri/

Engine Yardさんのブログ『Nokogiri の基本(翻訳版)』は、イメージやサンプルソースをうまくつかながらキーワードを丁寧に説明してくれています。

(4) Gem Nokogiriのインストール

NokogiriのインストールはRubyのスクリプトの場合は次の通りです。

1
gem install nokogiri

Railsのプロジェクトで使う場合は、Gemfileに次のコードを追加します。

1
gem 'nokogiri'

次にターミナルでGemをインストール。

1
bundle install

(5) Yahoo!Japanのトップページからtitleを取得

ここからは少し手を動かしながら、実際にYahoo!Japanのトップページからtitleを取得してくるRubyのスクリプトを作ります。

まず、ファイルscrape_yahoo_title.rbを作成します。作成したファイルをエディタで開いて次のようなソースを書きます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# URLにアクセスするためのライブラリの読み込み
require 'open-uri'
# Nokogiriライブラリの読み込み
require 'nokogiri'

# スクレイピング先のURL
url = 'http://www.yahoo.co.jp/'

charset = nil
html = open(url) do |f|
  charset = f.charset # 文字種別を取得
  f.read # htmlを読み込んで変数htmlに渡す
end

# htmlをパース(解析)してオブジェクトを生成
doc = Nokogiri::HTML.parse(html, nil, charset)

# タイトルを表示
p doc.title

作成したら、ターミナルで以下のコマンドにより実行できます。

1
ruby scrape_yahoo_title.rb

すると以下の様な結果が帰ってくれば成功です。

1
"Yahoo! JAPAN"

(6) NaverまとめTechページの注目一覧のタイトル・画像を取得

次にNaverまとめのTechページの注目一覧のタイトル・画像を取得してみます。

まず、ファイルscrape_naver_matome_tech.rbを作成します。作成したファイルをエディタで開いて次のようなソースを書きます。

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
require 'open-uri'
require 'nokogiri'

# スクレイピング先のURL
url = 'http://matome.naver.jp/tech'

charset = nil
html = open(url) do |f|
  charset = f.charset # 文字種別を取得
  f.read # htmlを読み込んで変数htmlに渡す
end

# htmlをパース(解析)してオブジェクトを作成
doc = Nokogiri::HTML.parse(html, nil, charset)

doc.xpath('//li[@class="mdTopMTMList01Item"]').each do |node|
  # tilte
  p node.css('h3').inner_text

  # 記事のサムネイル画像
  p node.css('img').attribute('src').value

  # 記事のサムネイル画像
  p node.css('a').attribute('href').value
end

作成したら、ターミナルで以下のコマンドにより実行できます。

1
ruby scrape_naver_matome_tech.rb

(5), (6)のサンプルソースはGitHubに公開しています。

(7) 実際にコードを書くときに参考になるサイト

http://d.hatena.ne.jp/otn/20090509/p1

実際にNokogiriのコードを書くときに役に立ちそうなチートシート的なサイトがこの『スクレイピングのためのNokogiri利用メモ』。 Nokogiriでスクリプトを書いていく上で何度もお世話になると思います。

http://cockscomb.info/scrape_kishocho_with_ruby_and_nokogiri/

Nokogiriを使って、気象庁のデータをスクレイピングしたサンプルソースが載っているサイトがこの『Ruby + Nokogiri で 気象庁スクレイピング』。実際にコードを書いている時に詰まったら、読んでみるのもいいかも。

http://beyond.cocolog-nifty.com/akutoku/2009/04/ruby-nokogiriwi.html

こちらはWikipediaのデータをスクレイピングしたサンプルソースが書かれているのが『Nokogiriで、Wikipediaの記事をパースする』です。書いていく上でのヒントになるかも。

Ruby製の構文解析ツール、Nokogiriの使い方 with Xpath
Nokogiriのメソッドを網羅的に説明してくれている記事。Nokogiriを使いこなしていく中で、より洗練された書き方を模索したくなったら是非読んでほしい記事です。

Nokogiriによるスクレイピング(YahooFinance)
Yahoo Financeの情報をスクレイピングするサンプルソース。短くて読みやすいので勉強にちょうどいいかも。

(8) Railsへの組み込み

Rubyでスクリプトができたら、Rakeタスクにして呼び出すのが一番シンプルだと思います。拙著『RailsでオリジナルRakeタスク作成からRSpecテストまで』をよかったら御覧ください。

Included file ‘custom/google_ads_yoko_naga.html’ not found in _includes directory

補足: Windowsで初めての人向けの記事

最強の情報収集術!初心者向けRuby+NokogiriでWebスクレイピング徹底解説
RubyInstallerから始まっているので完全初心者の人にもとっつきやすい記事です!

お願い

個人的に初心者向けにRuby/Railsを教える機会が増えています。この記事に関連する分野で効率的に勉強するのにおすすめな資料をご存知なら、Twitterで@zyunnosukeにメッセージ or コメント頂けたら感激します!

逆にこの記事を使ってトライしたら、なんか上手く動かない的な話も同じく大歓迎です。いつでもメッセージ下さい!

Special Thanks

RubyのNokogiriを使ってサイトをスクレイピングする

変更来歴

(04/16 08:10) (7) 実際にコードを書くときに参考になるサイトを追加
(05-01 21:45) (7) 実際にコードを書くときに参考になるサイトを追加
(05-02 08:10) 補足: Windowsで初めての人向けの記事を追加

おすすめの書籍