2011-12-12 33 views
7

Tôi đang cố gắng hiểu Nokogiri. Có ai có một liên kết đến một ví dụ cơ bản của phân tích Nokogiri/scrape cho thấy cây kết quả. Hãy nghĩ nó sẽ thực sự giúp tôi hiểu.Một số ví dụ về cách sử dụng Nokogiri là gì?

+3

Bạn đã xem tài liệu hướng dẫn/hướng dẫn: http://nokogiri.org/tutorials. Câu hỏi này hơi quá chung chung, có thể bị đóng lại;) –

+0

Thông tin này có trong tài liệu Nokogiri. Ngoài ra, nếu bạn sẽ xem qua một số liên kết có liên quan ở phía bên phải của trang, bạn sẽ tìm thấy các ví dụ về cách sử dụng Nokogiri, cùng với các ví dụ về đầu ra của nó. –

Trả lời

10

Sử dụng IRB và Ruby 1.9.2:

tải Nokogiri:

1.9.2-p290 :001 > require 'nokogiri' 
true 

Phân tích một tài liệu:

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 

Nokogiri thích tài liệu cũng được hình thành. Lưu ý rằng nó đã thêm DOCTYPE vì tôi đã phân tích cú pháp dưới dạng tài liệu. Cũng có thể phân tích cú pháp thành một đoạn tài liệu, nhưng điều đó khá chuyên biệt.

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" 

Tìm kiếm tài liệu để tìm ra đầu tiên <p> nút sử dụng CSS và lấy nội dung của nó:

1.9.2-p290 :004 > doc.at('p').text 
"foobar" 

Sử dụng một tên phương pháp khác nhau để làm điều tương tự:

1.9.2-p290 :005 > doc.at('p').content 
"foobar" 

Tìm kiếm tài liệu cho tất cả các nút <p> bên trong thẻ <body> và lấy nội dung của thẻ đầu tiên. search trả về một nút, giống như một mảng các nút.

1.9.2-p290 :006 > doc.search('body p').first.text 
"foobar" 

Thay đổi nội dung của nút:

1.9.2-p290 :007 > doc.at('p').content = 'bar' 
"bar" 

Phát ra một tài liệu phân tích cú pháp dưới dạng 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" 

Hủy bỏ một nút:

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" 

Đối cào, có rất nhiều câu hỏi về SO sử dụng Nokogiri để tách HTML ra khỏi các trang web. Tìm kiếm StackOverflow cho "nokogiri and open-uri" sẽ hữu ích.

+0

Cũng tìm thấy giới thiệu tốt từ đồng tác giả: http://www.engineyard.com/blog/2010/getting-started-with-nokogiri/ cũng sơ đồ cây được đề cập trong bài viết có thể được xem tại: http://rubyreflector.com /Cấu trúc dữ liệu – user1094747

Các vấn đề liên quan