Ruby on Rails: hpricot
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Quelle
http://code.whytheluckystiff.net/hpricot/
[Bearbeiten] Installation
$ gem install hpricot
[Bearbeiten] hpricot laden
require 'rubygems' require 'hpricot' require 'open-uri' # optional, nur wenn Seiten aus dem Internet mit open-uri geladen werden sollen, s.u.
[Bearbeiten] HTML Seite öffnen
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
[Bearbeiten] Was kann ich tun
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>."
[Bearbeiten] HowTo
[Bearbeiten] Wie erkenne ich dass eine Datei vom Internet nicht geladen werden kann?
TODO
- open-uri Doku?
- OpenURI::HTTPError?
[Bearbeiten] Wie filtere ich Texte aus HTML-Seiten?
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/