はじめに
既存htmlファイルの改修とか、スクレイピングとかが必要になりました。
そこで、nokogoriを使って処理を試そうと思いました。
と、ついでにrubyの復習も。
ツッコミ等大歓迎
調査対象(仮にread.htmlとする)
ここで記載されているソース
http://vsanna.sakura.ne.jp/wp/2015/01/scraping_start_up2/
ソースコード 仮に parser1.rb とでもします。
# ノコギリ読み込みます。
require 'nokogiri'
# 読み込みたいファイルを読み込んでインスタンス生成
f = File.open("read.html")
doc = Nokogiri::HTML(f);
f.close
# 欲しいものを拾って
what_i_want = (doc).xpath("/html/body/p")
# 単純表示
puts what_i_want
実施コマンド
$ ruby parser1.rb
結果
<p>これは本文。ほげほげ。</p>
やたらこまかい解説
ライブラリ”nokogiri” を読み込む
# ノコギリ読み込みます。
require 'nokogiri'
ライブラリを読み込むときは、require で読み込むこと。
require は、対象物を1回だけ読み込む。
ファイルを読み、インスタンスを生成する。
# 読み込みたいファイルを読み込んでインスタンス生成
f = File.open("read.html")
doc = Nokogiri::HTML(f);
f.close
ファイルのストリームを開く
開いたストリームから、ノコギリのインスタンスを生成する。
ストリームを使い終わったら、閉じる(忘れずに)
xpathを使い、取得対象を特定する。
xpath とは、htmlやxmlのツリー構造を利用して、欲しい要素を(node)を特定するを特定する手法とのこと。
ここでは、さきほど指定したnokogiri のインスタンスを指定します。
基本文法は
取得結果 = (nokogiriのインスタンス).xpath("ツリー構造")
したがって
what_i_want = (doc).xpath("/html/body/p")
ここでは、what_i_want に対し、nokogiriメソッドに対しpathにてhtmlタグ、bodyタグ、pタグで
囲まれている領域を指すことになります。
取得結果を表示します
# 単純表示
puts what_i_want
ここでは、putsを利用した。pメソッドだと結果がうまく表示されない。
参考、引用元
【スクレイピングのやり方#2】周りに勧められてスクレイピングなるものをしてみたいけど何すればいいのかわからなかったあの日の自分へ
第18章 ロード
http://i.loveruby.net/ja/rhg/book/load.html
requireとinclude のちがい
http://qiita.com/yanap/items/65c3953fb4e52218399a
puts命令
http://ref.xaio.jp/ruby/classes/kernel/puts
余談
htmlそのまま記載できればなー。<pre>タグではだめみたい。