モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

Ruby Nokogiri による HTML パース

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2013/08/08
最終更新最終更新
2018/10/07
記事区分記事区分
一般公開

例えば Seleniumで複雑なことをしようとすると driver.page_source で取得したHTMLをパースしたくなります。このような用途のために、RubyにはNokogoriというライブラリがあります。

要素セレクタは2種類

XPathまたはjQueryでもお馴染のCSSセレクタを使用できます。本ページではCSSセレクタを用いた例を示します。

解析対象HTMLの読み込み

Nokogiriの入力はUTF-8である必要があります。ちなみに出力もUTF-8です。

文字列HTMLを解析

sample.rb

#!/usr/bin/ruby

require "nokogiri"
require "selenium-webdriver"

driver = Selenium::WebDriver.for :firefox
driver.manage.timeouts.implicit_wait = 10 # seconds

driver.get "http://www.example.com/"
doc = Nokogiri::HTML driver.page_source.encode("UTF-8") # Nokogiriの入力はUTF-8

p doc.title # タイトルを解析して出力
driver.quit

出力例

$ ruby sample.rb
"Example Domain"

ファイルを読み込み

sample.rb

#!/usr/bin/ruby

require "nokogiri"

f = File.open('/Users/YourName/Desktop/example_domain.html')
doc = Nokogiri::HTML(f)

p doc.title # タイトルを解析して出力

出力例

$ ruby sample.rb
"Example Domain"

要素の選択 (CSSセレクタ)

2つのCSSセレクタメソッドがあります。

  • .css('式'): 合致するすべての要素を配列で返します
  • .at_css('式'): 最初に合致した要素だけを返します

コード例:

doc.css('p.sample-class').each do |sample|
  p sample.to_s
end

p doc.at_css('p#sample-id').to_s

セレクト後の要素情報の取得

本文の取得

p element.text
p element.content # .textメソッドと同じ

親要素

p element.parent.to_s

タグ名

p element.name

属性値

p element['href'] # <a href="http://www.iana.org/domains/example">More information...</a>

さらなるセレクト

p doc.at_css('p#sample-id').css('a').to_s
Likeボタン(off)0
詳細設定を開く/閉じる
アカウント プロフィール画像

Rubyを使った効率的なスクリプトの書き方を紹介

記事の執筆者にステッカーを贈る

有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

>>さらに詳しくステッカーを贈る
ステッカーを贈る コンセプト画像

Feedbacks

Feedbacks コンセプト画像

    ログインするとコメントを投稿できます。

    ログインする

    関連記事

    • レイアウトおよび部分テンプレートに関するまとめ (Rails4)
      レイアウトおよび部分テンプレートはどちらもテンプレート (*.html.erb) に共通の要素をまとめておき、任意のテンプレートから利用できるようにしておくための仕組みです。フッターやヘッダーといった大枠はレイアウト、小さなパーツは部分テンプレートというイメージで使い分けましょう。 レイアウトの使用方法 クラス毎に指定する方法と、アクション毎に指定する方法があります。 app/views/layo...
      taro三世taro三世10/21/2016に更新
      いいねアイコン画像0
    • Ruby コードスニペット (正規表現)
      sample.rb str = "001: This is a string." var1,var2 = 2,3 # 'EOS'とすると#{}による変数展開がなされない (%03dは展開される) doc = (<<"EOS" % var1) # 括弧は省略可。要は<<"EOS"の次の行からEOSまで。(参: <<-"EOS"とすると前に空白...
      だいふくうさぎだいふくうさぎ5/13/2018に更新
      いいねアイコン画像0
    • OAuthを用いずにTwitterに自動投稿する (回数制限あり, Selenium with Ruby)
      Seleniumを用いて、OAuthを用いずにTwitterに自動投稿するRubyスクリプトを記述してみます。連続で複数回実行すると、ボット判定としてキャプチャ認証が発生します。その認証までは通過できませんので悪しからず。また、Twitterの仕様変更次第ではDOMの構造が変化するため、下記サンプルは機能しなくなる恐れが有ります。 twitter_post.rb #!/usr/bin/ruby r...
    • Ruby における日本語のエンコーディング
      日本語を含めて多言語対応する際には、Asciiコード以外の文字コードセットが必要になります。日本語が主となる場合、よく使われる文字セットにはUnicode, Shift_JIS, EUC-JPがあります。このうち Unicode だけは特殊であり、世界中のあらゆる文字を収録しようとしていることから 1 文字を表現するために必要なバイト数が大きくなってしまっています。そのため Unicode のうち...
      だいふくうさぎだいふくうさぎ4/21/2017に更新
      いいねアイコン画像0
    • Rails3ビューテンプレートの基本的な使用方法 (Ruby)
      Railsでは、ERB (eRuby (テキストファイルにRubyスクリプトを埋込む書式の仕様) をRubyで実装したもの) を用いてHTML内にRubyスクリプトを埋込むことができます。 <% %> で囲むと出力されません (if-elseなど制御構文を記述します) <%= %> で囲むとエスケープ出力されます <%== %> で囲むとエスケープされずに...
      ほんわかパンダほんわかパンダ10/21/2016に更新
      いいねアイコン画像0