2011-12-12 22 views
7

Próbuję zrozumieć Nokogiri. Czy ktoś ma link do podstawowego przykładu analizy/scrapeowania Nokogiri pokazującego powstałe drzewo. Pomyśl, że to naprawdę pomogłoby mi zrozumieć.Jakie są przykłady użycia Nokogiri?

+3

Czy obejrzałeś dokumentację/samouczki: http://nokogiri.org/tutorials. To pytanie jest trochę zbyt ogólne, może zostać zamknięte;) –

+0

Ta informacja znajduje się w dokumentach Nokogiri. Ponadto, jeśli przejrzysz kilka powiązanych linków z prawej strony, znajdziesz przykłady użycia Nokogiri wraz z przykładami jego wyników. –

Odpowiedz

10

Korzystanie IRB i Ruby 1.9.2:

obciążenia Nokogiri:

1.9.2-p290 :001 > require 'nokogiri' 
true 

Przetwarza dokument:

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 lubi dobrze uformowane dokumenty. Zauważ, że dodano DOCTYPE, ponieważ przeanalizowałem go jako dokument. Możliwe jest również parsowanie jako fragment dokumentu, ale jest to dość wyspecjalizowane.

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" 

Szukaj dokumentu w celu znalezienia pierwszego <p> węzła za pomocą CSS i chwycić jego treść:

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

użyć innej nazwy metoda zrobić to samo:

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

przeszukać dokument dla wszystkich węzłów <p> wewnątrz znacznika <body> i pobierz zawartość pierwszego. search zwraca zestaw węzłów, który jest podobny do tablicy węzłów.

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

zmienić zawartość węzła:

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

wyemituje dokument analizowany jako 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" 

Usuń węzeł:

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" 

Co do zgarniania, na temat SO jest wiele pytań używanie Nokogiri do rozdzierania HTML z witryn. Wyszukiwanie StackOverflow dla "nokogiri and open-uri" powinno pomóc.

+0

Znaleźliśmy również dobre wprowadzenie od współtwórcy: http://www.engineyard.com/blog/2010/getting-started-with-nokogiri/ także schemat drzewa wspomniany w artykule można zobaczyć na stronie: http://rubyreflector.com/Struktury danych – user1094747

Powiązane problemy