2008-09-15 12 views
11

Ich möchte Daten von verschiedenen Webseiten wie Adressen von Restaurants oder Daten von verschiedenen Ereignissen für einen bestimmten Ort und so weiter bekommen. Was ist die beste Bibliothek, die ich zum Extrahieren dieser Daten von einer bestimmten Gruppe von Websites verwenden kann?beste Bibliothek, um Web-Scraping zu tun

+0

Überprüfen Sie [diese Frage] (http://stackoverflow.com/questions/2861/options-for-html-scraping) für alle Ihre Antworten. –

Antwort

0

Welche Sprache möchten Sie verwenden?

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

0

Sie können verwenden, um es in XHTML zu konvertieren und dann die XML-Verarbeitungsmöglichkeiten zu verwenden, die in Ihrer Sprache verfügbar sind.

1

Die Perl WWW::Mechanize Bibliothek eignet sich hervorragend für die Arbeit mit dem Esel, die Interaktion mit einer Website, um auf die richtige Seite zu gelangen, die Sie benötigen.

0

Ich würde empfehlen BeautifulSoup. Es ist nicht das schnellste, aber es funktioniert sehr gut in Bezug auf die Nicht-Wohlgeformtheit von (X) HTML-Seiten, an denen sich die meisten Parser ersticken.

4

Ich denke, die allgemeine Antwort hier ist die Verwendung einer beliebigen Sprache + http Bibliothek + HTML/XPath Parser. Ich finde, dass Rubin mit + hpricot einer schönen sauberen 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 

Für mehr auf Hpricot http://code.whytheluckystiff.net/hpricot/

10

Das HTML Agility Pack für .net programers sehen ist genial. Es verwandelt Webseiten 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("//[email protected]") 
{ 
HtmlAttribute att = link"href"; 
att.Value = FixLink(att); 
} 
doc.Save("file.htm"); 

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

3

Ich persönlich mag die WWW::Mechanize Perl-Modul für diese Art von Aufgaben. Sie erhalten ein Objekt, das einem typischen Webbrowser nachempfunden ist (d. H. Sie können Links folgen, Formulare ausfüllen oder den "Zurück-Button" verwenden, indem Sie Methoden aufrufen).

Für die Extraktion des eigentlichen Inhalts, könnte man es dann bis zu HTML::TreeBuilder haken Sie die Website, die Sie in einen Baum von HTML::Element Objekte zu besuchen sind zur Zeit zu transformieren, und extrahieren Sie die Daten, die Sie (die look_down() Methode von HTML::Element wollen, ist vor allem sinnvoll).

1

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

0

was jemand gesagt hat.

verwenden Sie eine beliebige Sprache.

Solange Sie eine gute Parser-Bibliothek und http-Bibliothek haben, sind Sie festgelegt.

die Tree-Sachen sind langsamer, dann nur mit einer guten Parse-Bibliothek.

3

Ich denke, Watir oder Selen sind die beste Wahl. Die meisten der anderen genannten Bibliotheken sind tatsächlich HTML-Parser, und das ist nicht das, was Sie wollen ... Sie kratzen, wenn der Besitzer der Website wollte, dass Sie auf seine Daten zugreifen, würde er eine Dump seiner Datenbank oder Website auf ein Torrent und vermeiden Sie alle HTTP-Anfragen und teuren Verkehr.

im Grunde müssen Sie HTML analysieren, aber noch wichtiger automatisieren einen Browser. Dies bis zu dem Punkt, dass man die Maus bewegen und klicken kann, was im Grunde einen Benutzer wirklich nachahmt. Sie müssen ein screencapture-Programm verwenden, um zu den Captchas zu gelangen und sie an decaptcha.com zu senden (um sie für einen Bruchteil eines Cent zu lösen), um das zu umgehen. Vergessen Sie nicht, diese Captcha-Datei zu speichern, indem Sie den HTML-Code analysieren, ohne ihn in einem Browser so darzustellen, wie er angezeigt werden soll. Sie screenscraping, nicht httprequestcraping.

watir hat den Trick für mich in Kombination mit autoitx (für das Bewegen der Maus und die Eingabe von Schlüsseln in Feldern -> manchmal ist dies notwendig, um die richtigen Javascript-Ereignisse) und ein einfaches Bildschirm-Capture-Dienstprogramm für die Captchas. Auf diese Weise werden Sie am erfolgreichsten sein, es ist ziemlich nutzlos, einen großen HTML-Parser zu schreiben, um herauszufinden, dass der Besitzer der Seite einen Teil des Textes in Grafiken umgewandelt hat. (Problematisch? Nein, holen Sie sich einfach eine OCR-Bibliothek und füttern Sie die JPEG, Text wird zurückgegeben). Außerdem habe ich selten gesehen, dass sie so weit gehen, obwohl es auf chinesischen Seiten eine Menge Text in Grafiken gibt.

Xpath speicherte meinen Tag die ganze Zeit, es ist eine große Domain-spezifische Sprache (IMHO, ich könnte falsch liegen) und Sie können zu jedem Tag auf der Seite, obwohl manchmal müssen Sie es zwicken.

Was ich vermisst habe, war 'reverse templates' (das Robotergerüst von Selen hat das). Perl hatte dies im CPAN-Modul Template :: Extract, sehr praktisch.

Die HTML-Parsing, oder die Erstellung des DOM, ich würde den Browser verlassen, ja, es wird nicht so schnell sein, aber es wird die ganze Zeit funktionieren.

Auch Bibliotheken, die vorgeben, Useragent zu sein, sind nutzlos, Seiten sind heutzutage vor Kratzen geschützt, und das Rendern der Seite auf einem echten Bildschirm ist oft notwendig, um über das Captcha hinauszukommen, aber auch Javascript-Ereignisse, die ausgelöst werden müssen Informationen zu erscheinen etc.

Watir wenn Sie in Ruby, Selen für den Rest, würde ich sagen. Der "Human Emulator" (oder Web Emulator in Russland) ist wirklich für diese Art von Kratzen geeignet, aber andererseits ist es ein russisches Produkt von einer Firma, die ihre Absichten nicht verheimlicht.

ich denke auch, dass eine dieser Wochen Wiley ein neues Buch über Kratzen hat, das sollte interessant sein. Viel Glück ...

Verwandte Themen