Zum Inhalt springen

Ruby on Rails: hpricot

Aus Wikibooks

Quelle

[Bearbeiten]

http://code.whytheluckystiff.net/hpricot/

Installation

[Bearbeiten]
$ gem install hpricot

hpricot laden

[Bearbeiten]
require 'rubygems'
require 'hpricot'
require 'open-uri'    # optional, nur wenn Seiten aus dem Internet mit open-uri geladen werden sollen, s.u.

HTML Seite öffnen

[Bearbeiten]

HTML 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

[Bearbeiten]

HTML 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

[Bearbeiten]

Wie erkenne ich dass eine Datei vom Internet nicht geladen werden kann?

[Bearbeiten]

TODO

  • open-uri Doku?
  • OpenURI::HTTPError?

Wie filtere ich Texte aus HTML-Seiten?

[Bearbeiten]

beispielsweise

  • 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/

[Bearbeiten]