3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

nokogiriスクレイピング練習 はろーわーるど (くどい説明多数)

3
Last updated at Posted at 2015-07-26

はじめに

既存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>タグではだめみたい。

3
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?