Wir haben also ein HTML-Dokument, wollen aber Daten, was bedeutet, dass wir die vorherige Antwort in für Menschen lesbare Informationen parsen sollten.
Beginnen wir mit kleinen Schritten und extrahieren wir den Titel der Website. Eine bemerkenswerte Eigenschaft von Ruby ist, dass mit wenigen Ausnahmen alles ein Objekt ist, was bedeutet, dass selbst eine einfache Zeichenkette Attribute und Methoden haben kann.
Daher können wir einfach über die Attribute des Objekts `parsed_page` auf den Wert des Website-Titels zugreifen.
puts parsed_page.title
Als Nächstes extrahieren wir alle Links von der Website. Dazu verwenden wir eine allgemeinere Methode, die bestimmte Tags parst: die css-Methode.
links = parsed_page.css('a')
links.map {|element| element["href"]}
puts links
Wir verwenden außerdem die „map“-Methode, um nur die Links mit einem „href“-Attribut aus dem HTML-Code zu behalten.
Nehmen wir ein realistischeres Beispiel. Wir müssen die Artikel aus dem Blog extrahieren, ihren Titel, ihre Adresse und ihre Meta-Beschreibung.
Wenn Sie eine der Artikelkarten untersuchen, sehen Sie, dass wir die Adresse und den Titel des Artikels über die Attribute des Links abrufen können. Außerdem befindet sich die Meta-Beschreibung unter einem <div>-Tag mit einem bestimmten Klassennamen.
Natürlich gibt es viele Möglichkeiten, diese Suche durchzuführen. Die von uns verwendete Methode besteht darin, nach allen <div>-Tags mit dem Klassennamen „td_module_10“ zu suchen und dann jedes einzelne davon zu durchlaufen, um die <a>-Tags und die inneren -Tags mit dem Klassennamen „td-excerpt“ zu extrahieren.
article_cards = parsed_page.xpath("//div[contains(@class, 'td_module_10')]")
article_cards.each do |card|
title = card.xpath("div[@class='td-module-thumb']/a/@title")
link = card.xpath("div[@class='td-module-thumb']/a/@href")
meta = card.xpath("div[@class='item-details']/div[@class='td-excerpt']")
end
Ja, wie Sie vielleicht bereits erraten haben, ist ein XPath-Ausdruck der Schlüssel zum Erfolg, da wir nach HTML-Elementen anhand ihrer Klassennamen und ihrer übergeordneten Elemente suchen.