Ruby on Rails: hpricot
Quelle
BearbeitenInstallation
Bearbeiten$ gem install hpricot
hpricot laden
Bearbeitenrequire 'rubygems'
require 'hpricot'
require 'open-uri' # optional, nur wenn Seiten aus dem Internet mit open-uri geladen werden sollen, s.u.
HTML Seite öffnen
BearbeitenHTML kann man
- direkt als String übergeben
- von einer Datei einlesen
- oder aus dem Internet laden
#!ruby
doc_1 = Hpricot("<p>A simple <b>test</b> string.</p>") # HTML-String direkt übergeben
doc_2 = open("index.html") { |f| Hpricot(f) } # Datei einlesen
doc_3 = Hpricot(open("http://lexikon.meyers.de/meyers/Yoga")) # aus dem Internet laden - Achtung, an require 'open_uri' denken
Was kann ich tun
BearbeitenHTML Elemente finden (auch Arrays davon) und manipulieren
#!ruby
html = (doc/"#elementID").inner_html #=> "..<b>contents</b>.."
explanation = (doc/"/html/body/div[3]/div/div[2]/div[2]/div[2]/div/div[4]/p").inner_text # "Yoga .. Meditationssystem .."
#!ruby
doc = Hpricot("Das ist meine <b>Programmiersprache</b>.")
doc.at("b").swap("<i>Muttersprache</i>")
doc.to_html # => "Das ist meine <i>Muttersprache</i>."
HowTo
BearbeitenWie erkenne ich dass eine Datei vom Internet nicht geladen werden kann?
BearbeitenTODO
- open-uri Doku?
- OpenURI::HTTPError?
Wie filtere ich Texte aus HTML-Seiten?
Bearbeitenbeispielsweise
- Kommentare aus einem Weblog
- Lexikoneinträge aus Wikipedia
Dazu sind 3 Schritte nötig.
- Dokument mit firebug anlysieren - das Übergeordnete Element bestimmen
- Dokument einlesen
- mit hpricot das übergeordete Element auslesen und mit innertext den Text auslesen
Siehe auch http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/