Nokogiri
公式サイト:
使い方
url = "https://www.yahoo.co.jp/"
charset = nil
html = open(url) do |f|
charset = f.charset
f.read
end
doc = Nokogiri::HTML.parse(html, nil, charset)
title = doc.title
Code language: Ruby (ruby)
参考:
Nokogiri を使った Ruby スクレイピング 初心者向けチュートリアル | 酒と涙とRubyとRailsと
Nokogiri を使った Web スクレイピングの基礎/入門 | Madogiwa Blog
Nokogiri を使った Ruby でのスクレイピング 初心者編 | HETAREDREAM
Nokogiri を使ったスクレイピング入門 | gaaamii のブログ
Ruby の Nokogiri と CSS セレクタ | 社内泊エンジニアのチラ裏
Ruby 製の構文解析ツール、Nokogiri の使い方 with Xpath | プログラマでありたい
スクレイピングのための Nokogiri 利用メモ | それはそれ。これはこれ。
Ruby の Nokogiri を使ってサイトをスクレイピングする | Think Big Act Local
parse
参考:
Nokogiri::HTML4.parse | RubyDoc.info
css
node.css(".nav .item")
node.css("li + li > a")
node.css("#name", "#age", "#address")
Code language: Ruby (ruby)
参考:
Nokogiri::XML::Searchable#css | RubyDoc.info
at_css
参考:
Module: Nokogiri::XML::Searchable#ac_css | RubyDoc.info
parent
参考:
Nokogiri で DOM 要素の深さを知る方法 – Qiita
Get parent element from HTML using Nokogiri – Stack Overflow
ノードの判定
ノードが見つかったかどうかの判定には empty?
もしくは present?
を使う。
参考:
ノードの削除
参考:
Nokogiri で任意の node を削除する | Secret Garden
Nokogiri::XML::Node#remove | RubyDoc.info
Nokogiri::XML::NodeSet#remove | RubyDoc.info
Nokogiri::XML::Node#unlink | RubyDoc.info
Nokogiri::XML::NodeSet#unlink | RubyDoc.info
ノードをアンラップする
ノードをノード内のコンテンツと置き換える。
node.replace(node.children)
Code language: Ruby (ruby)
参考:
Remove a tag but keep the text – Stack Overflow
ノードを複製する (dup)
参考:
Nokogiri::XML::Node#dup | RubyDoc.info
Nokogiri::XML::NodeSet#dup | RubyDoc.info
:contains()
指定したテキストを含むノードを選択する。
doc.css("div:contains('something good')")
Code language: Ruby (ruby)
参考:
How to select nodes by matching text? – Stack Overflow
:has()
doc.css("div:has(.picture)")
Code language: Ruby (ruby)
参考:
:has CSS pseudo class in Nokogiri – Stack Overflow
Should support CSS selector: parent:has(>child) · Issue #688 · sparklemotion/nokogiri – GitHub
each
参考:
Nokogiri::XML::NodeSet#each | RubyDoc.info
attr
要素の id
を取得する。
doc.css("#content").first.attr(:id)
# => "content"
Code language: Ruby (ruby)
要素のクラスを取得する。
doc.css(".preview.picture").first.attr(:class)
# => "preview picture"
Code language: Ruby (ruby)
参考:
Nokogiri::XML::NodeSet#attr | RubyDoc.info
remove_attribute
参考:
Nokogiri::XML::Node#remove_attribute | RubyDoc.info
ノードの style を扱う
参考:
Strip style attributes with nokogiri – Stack Overflow
Using Nokogiri to iterate through style attributes – Stack Overflow
to_html
参考:
Nokogiri::XML::Node#to_html | RubyDoc.info
Nokogiri::XML::NodeSet#to_html | RubyDoc.info
Nokogiri::XML::DocumentFragment#to_html | RubyDoc.info
Nokogiri::HTML4::Builder#to_html | RubyDoc.info
write_to
参考:
Nokogiri::XML::Node#write_to | RubyDoc.info
self::node()
参考:
特定の単語を含むリンクをどうやって得るか | rubikitch
classes
参考:
Nokogiri::XML::Node#classes | RubyDoc.info
attributes
全ての属性をハッシュとして返す。属性名がキーとなり、値は Attr
クラスのインスタンスが格納される。
node_id = doc.css("#content").first.attributes["id"]
node_id.class
# => Nokogiri::XML::Attr
node_id.to_s
# => "content"
Code language: Ruby (ruby)
参考:
Nokogiri::XML::Node#attributes | RubyDoc.info
Nokogiri::XML::Attr | RubyDoc.info
Slop
参考:
Ruby の Nokogiri をもっと簡単に! Slop する | それマグで!
UTF-8
文字コードに UTF-8 を指定して、HTML のパースを実行する。
doc = Nokogiri::HTML.parse(html, nil, Encoding::UTF_8.to_s)
Code language: Ruby (ruby)
参考:
JSON を抽出する
参考:
Extract some JSON using Nokogiri – Stack Overflow
JSON に変換する
to_xml
及び Hash.form_xml
を用いてハッシュに変換し、ハッシュを to_json
で JSON
に変換する。
require "active_support/core_ext/hash"
Hash.from_xml(doc.to_xml).to_json
Code language: Ruby (ruby)
参考:
Nokogiri::XML::Document#to_xml | RubyDoc.info
from_xml – Hash | Ruby on Rails API [Official]
JSON::Generator::GeneratorMethods::Hash#to_json | Ruby リファレンスマニュアル [公式]
How to convert Nokogiri Document object into JSON – Stack Overflow
チュートリアル
Tutorials | Nokogiri [Official]
リファレンス
Documentation – Nokogiri | RubyDoc.info