Nokogiri

参考:

sparklemotion/nokogiri: Nokogiri is a Rubygem providing HTML, XML, SAX, and Reader parsers with XPath and CSS selector support. – GitHub

ドキュメント

参考:

Tutorials | Nokogiri [Official]

Cheat sheet · sparklemotion/nokogiri Wiki – GitHub

リファレンス

参考:

Documentation for sparklemotion/nokogiri | RubyDoc.info

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

参考:

Nokogiri を使った Ruby スクレイピング 初心者向けチュートリアル | 酒と涙とRubyとRailsと

Nokogiri で文字化けを防ぐ – Qiita

Ruby でクローラーを作る – Qiita

Nokogiri でスクレイピング – Qiita

nokogiri を使った Web スクレイピングの基礎・入門 | Madogiwa Blog

Nokogiri を使った Ruby でのスクレイピング 初心者編 | HETAREDREAM

nokogiri を使ったスクレイピング入門 | gaaamii のブログ

ruby の nokogiri と css セレクタ | 社内泊エンジニアのチラ裏

Nokogiri の覚書 | 旧 toyoshi の日記

Ruby 製の構文解析ツール、Nokogiri の使い方 with Xpath | プログラマでありたい

HTML の簡単な解析 | Qoosky

Ruby で Web スクレイピング | yhara.jp

nokogiri 基礎 – Qiita

スクレイピングのための Nokogiri 利用メモ | それはそれ。これはこれ。

Nokogiri を使用したクローラーめも – Qiita

Ruby の Nokogiri を使ってサイトをスクレイピングする | Think Big Act Local

parse

参考:

Method: Nokogiri::HTML.parse — Documentation for sparklemotion/nokogiri | RubyDoc.info

css

node.css(".nav .item")
node.css("li + li > a")
node.css("#name", "#age", "#address")

参考:

css – Module: Nokogiri::XML::Searchable — Documentation for sparklemotion/nokogiri

at_css

参考:

at_css – Module: Nokogiri::XML::Searchable — Documentation for sparklemotion/nokogiri

parent

参考:

Nokogiri で DOM 要素の深さを知る方法 – Qiita

Get parent element from HTML using Nokogiri – Stack Overflow

ノードの判定

ノードが見つかったかどうかの判定には empty? もしくは present? を使う。

参考:

Nokogiri を使ってるとよく出るエラー lib/nokogiri/xml/node_set.rb:164:in `attr’: undefined method `attribute’ for nil:NilClass (NoMethodError) – Qiita

ノードの削除

参考:

Method: Nokogiri::XML::Node#remove — Documentation for nokogiri | RubyDoc.info

Method: Nokogiri::XML::NodeSet#remove — Documentation for nokogiri | RubyDoc.info

Method: Nokogiri::XML::Node#unlink — Documentation for nokogiri | RubyDoc.info

Method: Nokogiri::XML::NodeSet#unlink — Documentation for nokogiri | RubyDoc.info

Nokogiri で任意の node を削除する | Secret Garden (Instrumental)

ノードをアンラップする

ノードをノード内のコンテンツと置き換える。

node.replace(node.children)

参考:

Remove a tag but keep the text – Stack Overflow

ノードを複製する (dup)

参考:

Method: Nokogiri::XML::Node#dup — Documentation for sparklemotion/nokogiri | RubyDoc.info

Method: Nokogiri::XML::NodeSet#dup — Documentation for sparklemotion/nokogiri | RubyDoc.info

:contains()

指定したテキストを含むノードを選択する。

doc.css("div:contains('something good')")

参考:

How to select nodes by matching text? – Stack Overflow

:has()

doc.css("div:has(.picture)")

参考:

:has CSS pseudo class in Nokogiri – Stack Overflow

:has() selector should match against all descendants, not just direct children · Issue #350 · sparklemotion/nokogiri – GitHub

Should support CSS selector: parent:has(>child) · Issue #688 · sparklemotion/nokogiri – GitHub

each

参考:

Method: Nokogiri::XML::NodeSet#each — Documentation for sparklemotion/nokogiri | RubyDoc.info

attr

要素の id を取得する。

doc.css("#content").first.attr(:id)
# => "content"

要素のクラスを取得する。

doc.css(".preview.picture").first.attr(:class)
# => "preview picture"

参考:

Method: Nokogiri::XML::NodeSet#attr — Documentation for sparklemotion/nokogiri | RubyDoc.info

remove_attribute

参考:

Method: Nokogiri::XML::Node#remove_attribute — Documentation for nokogiri | RubyDoc.info

ノードの style を扱う

参考:

Strip style attributes with nokogiri – Stack Overflow

Using Nokogiri to iterate through style attributes – Stack Overflow

to_html

参考:

Method: Nokogiri::XML::Node#to_html — Documentation for sparklemotion/nokogiri | RubyDoc.info

Method: Nokogiri::XML::NodeSet#to_html — Documentation for sparklemotion/nokogiri | RubyDoc.info

Method: Nokogiri::XML::DocumentFragment#to_html — Documentation for sparklemotion/nokogiri | RubyDoc.info

Method: Nokogiri::HTML::Builder#to_html — Documentation for sparklemotion/nokogiri | RubyDoc.info

write_to

参考:

write_to – Class: Nokogiri::XML::Node — Documentation for sparklemotion/nokogiri | RubyDoc.info

self::node()

参考:

特定の単語を含むリンクをどうやって得るか | rubikitch

classes

参考:

Method: Nokogiri::XML::Node#classes — Documentation for sparklemotion/nokogiri | RubyDoc.info

attributes

全ての属性を、キーが属性名、値が Attr クラスのハッシュとして返す。

node_id = doc.css("#content").first.attributes["id"]
node_id.class
# => Nokogiri::XML::Attr
node_id.to_s
# => "content"

参考:

Method: Nokogiri::XML::Node#attributes — Documentation for sparklemotion/nokogiri | RubyDoc.info

Class: Nokogiri::XML::Attr — Documentation for sparklemotion/nokogiri | RubyDoc.info

Slop

参考:

ruby の Nokogiri をもっと簡単に!Slop する。| それマグで!

Method: Nokogiri.Slop — Documentation for sparklemotion/nokogiri | RubyDoc.info

JSON を抽出する

参考:

Extract some JSON using Nokogiri – Stack Overflow

JSON に変換する

to_xml 及び Hash.form_xml を用いてハッシュに変換し、ハッシュから to_jsonJSON に変換する。

require "active_support/core_ext/hash"
Hash.from_xml(doc.to_xml).to_json

参考:

Method: Nokogiri::XML::Document#to_xml — Documentation for sparklemotion/nokogiri | RubyDoc.info

from_xml – Hash | Ruby on Rails API [Official]

instance method JSON::Generator::GeneratorMethods::Hash#to_json (Ruby 2.6.0)

JsonML – JSON Markup Language (jsonml.org)

How to convert Nokogiri Document object into JSON – Stack Overflow

 

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です