RubyにはWebスクレイピングするために便利なライブラリ「Nokogiri」があります。
Rubyで開発を行う際に、
「スクレイピングのやり方がよくわからない」
「効率よくWebスクレイピングしたい」
のような問題に直面することがあります。
ここでは、スクレイピングするときに便利なNokogiriについて、
【基本】Nokogiriとは
【基本】Nokogiriの使い方
【実践】Nokogiriで各要素を取得する
などについてわかりやすく解説していきます。
Nokogiriはスクレイピングするときに非常に便利なライブラリですので、この機会に覚えておきましょう!
そもそもスクレイピングとは?
スクレイピングとは主にWebサイトからHTMLのデータを取得して、必要な要素を抽出、加工するための技術を指します。
Webスクレイピングは多くの検索エンジンでも使用され、Web上のデータにインデックス付けするときなどに使用されます。
スクレイピングを使用することでHTMLのタグなどを簡単に取り出すことができるので、Webサービス開発の現場ではよく使用される技術の1つになります。
Nokogiriとは?
公式サイト:http://www.nokogiri.org/
NokogiriはRubyでWebスクレイピングするときにの定番ライブラリです。
Nokogiriを使用するためには、「open-url」「nokogiri」の2つのライブラリが必要になります。
open-urlは標準で使用できるライブラリですが、「nokogiri」は別途インストールする必要があります。
インストールは以下のコマンドで行います。
$ gem install nokogiri
インストールできたら、Nokogiriの使い方について見ていきましょう!
Nokogiriの使い方
HTMLの情報を全て取得したい場合は、NokogiriでHTMLの引数に取得したいURLを指定します。
サンプルプログラム:
require 'nokogiri' require 'open-uri' # 対象のURL url = "https://www.sejuku.net/blog/" # NokogiriでURLの情報を取得する contents = Nokogiri::HTML(open(url),nil,"utf-8") puts contents
実行結果:
<!DOCTYPE html> <!—[if IE 8]><html class=“ie8”><![endif]—><!—[if IE 9]><html class=“ie9”><![endif]—><!—[if gt IE 8]><!—><html lang=“ja” itemscope itemtype=“http://schema.org/WebSite” prefix=“og: http://ogp.me/ns#”> <!—<![endif]—> 〜 /* <![CDATA[ */ var Gianism = {“admin”:””}; /
このように簡単にHTMLの情報を取得することができましたね!
Nokogiriで各要素を取得する
ここではNokogiri公式ページで紹介されているサンプルプログラムを参考に、cssやxpathのノードを取得する方法について紹介します。
サンプルプログラム:
require 'nokogiri' require 'open-uri' # 対象のURL url = "https://www.sejuku.net/blog/" # Nokogiriで切り分け doc = Nokogiri::HTML(open(url)) puts "### CSSノードを検索する" doc.css('h2').each do |link| puts link.content end puts "### xpathノードを検索する" doc.xpath('//nav//ul//li/a', '//article//h2').each do |link| puts link.content end puts "### ミックスされたノードを検索する." doc.search('nav ul.menu li a', '//article//h2').each do |link| puts link.content end
実行結果:
### CSSノードを検索する 〜 LinuxでWindowsアプリ?Wine 3.0とWinMergeをインストールしてみた 【CSS】文字サイズを自由に変更! font-sizeの使い方 【C#入門】ListViewの使い方(項目の追加、ソートやスクロールの設定)
サンプルプログラムでは、Nokogiriで取得したHTML情報を元に、cssやxpathなどのノードを全て取得して出力しています。
各ノードごとに指定した「h2」タグの情報を全部取得することができました。
まとめ
ここでは、Nokogiriでスクレイピングする方法について、
- そもそもスクレイピングとは?
- Nokogiriとは
- Nokogiriの使い方
- Nokogiriで各要素を取得する
などについて解説しました。
Webサービスの開発を行う上で、スクレイピングは使用する機会が多いと言えますので、使い方についてはよく理解しておきましょう。
もし、Nokogiriの使い方を忘れてしまったら、この記事を思い出してくださいね!