使用Nokogiri有哪些例子?

use*_*747 7 ruby nokogiri

我想了解Nokogiri.有没有人有一个链接到Nokogiri解析/刮擦的基本例子显示结果树.认为这真的有助于我的理解.

the*_*Man 10

使用IRB和Ruby 1.9.2:

加载Nokogiri:

1.9.2-p290 :001 > require 'nokogiri'
true
Run Code Online (Sandbox Code Playgroud)

解析文档:

1.9.2-p290 :002 > doc = Nokogiri::HTML('<html><body><p>foobar</p></body></html>')
#<Nokogiri::HTML::Document:0x1012821a0
    @node_cache = [],
    attr_accessor :errors = [],
    attr_reader :decorators = nil
Run Code Online (Sandbox Code Playgroud)

Nokogiri喜欢结构良好的文档.请注意,它添加了DOCTYPE因为我解析为文档.它也可以作为文档片段进行解析,但这非常专业.

1.9.2-p290 :003 > doc.to_html
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>foobar</p></body></html>\n"
Run Code Online (Sandbox Code Playgroud)

搜索文档以<p>使用CSS 查找第一个节点并获取其内容:

1.9.2-p290 :004 > doc.at('p').text
"foobar"
Run Code Online (Sandbox Code Playgroud)

使用不同的方法名称来执行相同的操作:

1.9.2-p290 :005 > doc.at('p').content
"foobar"
Run Code Online (Sandbox Code Playgroud)

在文档中搜索标记<p>内的所有节点<body>,并获取第一个节点的内容.search返回一个节点集,就像一个节点数组.

1.9.2-p290 :006 > doc.search('body p').first.text
"foobar"
Run Code Online (Sandbox Code Playgroud)

更改节点的内容:

1.9.2-p290 :007 > doc.at('p').content = 'bar'
"bar"
Run Code Online (Sandbox Code Playgroud)

将解析的文档发送为HTML:

1.9.2-p290 :008 > doc.to_html
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>bar</p></body></html>\n"
Run Code Online (Sandbox Code Playgroud)

删除节点:

1.9.2-p290 :009 > doc.at('p').remove
#<Nokogiri::XML::Element:0x80939178 name="p" children=[#<Nokogiri::XML::Text:0x8091a624 "bar">]>
1.9.2-p290 :010 > doc.to_html
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body></body></html>\n"
Run Code Online (Sandbox Code Playgroud)

关于抓取,关于使用Nokogiri从网站撕开HTML有很多问题.在StackOverflow中搜索" nokogiri和open-uri "应该有所帮助.