Frage

Ich mag Daten erhält aus aus verschiedenen Web-Seiten wie Adressen von Restaurants oder Daten von verschiedenen Veranstaltungen für einen bestimmten Standort und so weiter. Was ist die beste Bibliothek, die ich für das Extrahieren dieser Daten aus einer gegebenen Menge von Websites verwenden kann?

War es hilfreich?

Lösung

Wenn Python verwenden, nehmen Sie einen guten Blick auf schöne Suppe ( http://crummy.com/software/BeautifulSoup ).

Eine extrem fähig Bibliothek, macht eine Brise Schaben.

Andere Tipps

Das HTML Agility Pack für .net programers ist genial. Es stellt sich Web-Seiten in XML-Dokumente, die mit XPath abgefragt werden können.

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
HtmlAttribute att = link"href";
att.Value = FixLink(att);
}
doc.Save("file.htm");

Sie können es hier finden. http://www.codeplex.com/htmlagilitypack

Ich denke, die allgemeine Antwort hier ist jede Sprache + http Bibliothek + html / XPath-Parser zu verwenden. Ich finde, dass mit Ruby + hpricot eine schöne saubere Lösung gibt:

require 'rubygems'
require 'hpricot'
require 'open-uri'

sites = %w(http://www.google.com http://www.stackoverflow.com)

sites.each do |site|
  doc = Hpricot(open(site))

  # iterate over each div in the document (or use xpath to grab whatever you want)
  (doc/"div").each do |div|
    # do something with divs here
  end
end

Weitere Informationen über Hpricot finden Sie unter http://code.whytheluckystiff.net/hpricot/

Ich persönlich mag die WWW :: Mechanize Perl-Modul für diese Art von Aufgaben. Es gibt Ihnen ein Objekt, das nach einem typischen Web-Browser modelliert ist, (das heißt Sie Links folgen kann, Formulare ausfüllen oder verwenden Sie die „Zurück-Button“ von Methoden und fordert sie auf).

Für die Extraktion des eigentlichen Inhalts, könnte man es dann Haken bis zu HTML :: TreeBuilder die Website verwandeln Sie zur Zeit in einen Baum von HTML :: Element Objekte, und extrahieren Sie die gewünschten Daten (die look_down() Methode von HTML::Element ist besonders nützlich).

Ich denke, watir oder Selen sind die beste Wahl. Die meisten anderen genannten Bibliotheken sind tatsächlich HTML-Parser, und das ist nicht das, was Sie wollen ... Sie sind Schaben, wenn der Eigentümer der Website, die Sie wollte, dass seine Daten bekommen, die er einen Dump seiner Datenbank gestellt hatte oder Website auf ein Strom und vermeiden Sie alle hTTP-Anfragen und teuer Verkehr.

im Grunde, müssen Sie HTML analysieren, aber noch wichtiger ist einen Browser automatisieren. Diese auf den Punkt in der Lage, die Maus zu bewegen und klicken Sie, im Grunde wirklich einen Benutzer imitiert. Sie benötigen ein Screencapture-Programm zu verwenden, um die Captchas zu erhalten und sie zu decaptcha.com abzuschicken (das löst sie für einen Bruchteil eines Cent), das zu umgehen. vergessen, dass die Captcha-Datei speichern, indem Sie die HTML-Analyse ohne es in einem Browser-Rendering ‚wie es soll, zu sehen.‘ Sie sind Screenscraping, nicht httprequestscraping.

Watir den Trick in Kombination für mich getan hat mit autoitx (für die Maus zu bewegen und Eingabe-Tasten in den Feldern -> manchmal ist dies necessery des rechten JavaScript-Ereignisse setzen) und einem einfachen Screen-Capture-Programm für das Captcha ist. Auf diese Weise werden Sie erfolgreichste, es ist ziemlich nutzlos einen großen HTML-Parser zu schreiben, um herauszufinden, dass der Anbieter der Seite, einen Teil des Textes in Grafiken verwandelt hat. (Problematische? Nein, nur eine OCR-Bibliothek erhalten und die JPEG-Feed, wird der Text zurückgegeben werden). Außerdem habe ich sie selten weit, dass gesehen haben gehen, obwohl auf chinesischen Websites, gibt es eine Menge von Text in Grafiken.

Xpath gespeichert mein Tag die ganze Zeit, es ist eine große Domain Specific Language (IMHO, könnte ich falsch sein) und Sie können auf der Seite zu jedem Tag bekommen, wenn auch manchmal müssen Sie es zwicken.

Was ich tat, war Miss ‚Reverse-Vorlagen‘ (der Roboter Rahmen von Selen hat dies). Perl hatte dies in CPAN Modul Template :: Extrakt, sehr praktisch.

Die HTML-Analyse oder die Schaffung des DOM, würde ich an den Browser verlassen, ja, es wird nicht so schnell sein, aber es wird die ganze Zeit arbeiten.

Auch Bibliotheken, die zu Useragents vorgeben sind nutzlos, Websites sind gegen heutzutage Schaben und die Wiedergabe der Website auf einem realen Bildschirm ist necessery oft über das CAPTCHA zu bekommen, aber auch Javascript Ereignisse, die für Informationen ausgelöst werden müssen erscheinen usw.

Watir, wenn Sie in Rubin sind, Selen für den Rest würde ich sagen. Der ‚Mensch Emulator‘ (oder Web-Emulator in Russland) ist für diese Art von Schaben wirklich gemacht, aber dann wieder ist es eine russische Produkt von einer Firma, die kein Hehl aus seinen Absichten macht.

ich denke auch, dass eine dieser Wochen Wiley ein neues Buch hat heraus Schaben, die interessant sein sollte. Viel Glück ...

Ich persönlich finde http://github.com/shuber/curl/tree/master und http://simplehtmldom.sourceforge.net/ genial für den Einsatz in meinem PHP-Spidern / Schaben Projekte.

Die Perl WWW :: Mechanize Bibliothek ist ausgezeichnet für das Erledigen der Esel Arbeit mit einer Website interagierender auf die aktuelle Seite, die Sie benötigen.

Ich würde verwenden LWP (Libwww für Perl). Hier ist eine gute kleine Anleitung: http: //www.perl. com / pub / a / 08/2002/20 / perlandlwp.html

WWW :: Scraper hat docs hier: http: //cpan.uwinnipeg .ca / htdocs / Scraper / WWW / Scraper.html Es kann als Basis nützlich sein, dann würden Sie wahrscheinlich ein eigenes Modul erstellen möchten, die Bergbau Bedürfnisse Ihr Restaurant passt.

LWP würden Sie einen grundlegenden Crawler für Sie zu bauen.

Es gibt eine Reihe von Antworten gewesen Perl Mechanize empfehlen, aber ich denke, dass Ruby Mechanize (sehr ähnlich wie Perl-Version) ist noch besser. Es behandelt einige Dinge wie Formen in eine viel sauberen Weise syntaktisch. Außerdem gibt es ein paar Frontends, die laufen auf von Ruby Mechanize die Dinge noch einfacher zu machen.

Welche Sprache Sie verwenden möchten?

curl mit awk könnte sein, alles, was Sie brauchen.

Sie können mit ordentlich es zu XHTML konvertieren, und dann unabhängig von XML-Verarbeitungsanlagen Ihre Sprache verwenden von Wahl zur Verfügung hat.

Ich würde empfehlen, BeautifulSoup . Es ist nicht die schnellste, sondern führt wirklich gut in Bezug auf die nicht-Wohlgeformtheit von (X) HTML-Seiten, die die meisten Parser ersticken.

, was jemand gesagt.

jede Sprache verwenden.

, solange Sie eine gute Parser Bibliothek und http-Bibliothek haben, sind Sie eingestellt.

Der Baum Sachen sind langsamer, dann nur eine gute Parse-Bibliothek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top