Nokogiri

公式サイト:

Nokogiri [Official]

使い方

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.titleCode language: Ruby (ruby)

参考:

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

参考:

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

ノードの削除

参考:

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

: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

参考:

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 する | それマグで!

Nokogiri.Slop | RubyDoc.info

UTF-8

文字コードに UTF-8 を指定して、HTML のパースを実行する。

doc = Nokogiri::HTML.parse(html, nil, Encoding::UTF_8.to_s)Code language: Ruby (ruby)

参考:

Nokogiri で文字化けを防ぐ – Qiita

How do I ensure UTF-8 throughout Nokogiri parsing, ERB template, and encoding HTML file – Stack Overflow

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_jsonCode 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 リファレンスマニュアル [公式]

JsonML – JSON Markup Language

How to convert Nokogiri Document object into JSON – Stack Overflow

チュートリアル

Tutorials | Nokogiri [Official]

リファレンス

Documentation – Nokogiri | RubyDoc.info

リポジトリ

sparklemotion/nokogiri: Nokogiri is a Rubygem Providing HTML, XML, SAX, and Reader Parsers with XPath and CSS Selector Support – GitHub

まとめ

Cheat Sheet · sparklemotion/nokogiri Wiki – GitHub

記事をシェアする:
タグ:

コメントを残す

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

Protected by reCAPTCHA