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
Antwort
Wenn Sie Python verwenden, werfen Sie einen Blick auf Beautiful Soup (http://crummy.com/software/BeautifulSoup).
Eine extrem leistungsfähige Bibliothek, die Kratzen zum Kinderspiel macht.
Welche Sprache möchten Sie verwenden?
curl mit awk könnte alles sein, was Sie brauchen.
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.
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.
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.
Ich würde LWP (Libwww für Perl) verwenden. Hier ist eine gute kleine Anleitung: http://www.perl.com/pub/a/2002/08/20/perlandlwp.html
WWW :: Scraper hat hier docs: http://cpan.uwinnipeg.ca/htdocs/Scraper/WWW/Scraper.html Es kann als Basis nützlich sein, würden Sie vermutlich ein eigenes Modul erstellen möchten, die Ihr Restaurant Bergbau Bedürfnissen entspricht.
LWP würde Ihnen einen grundlegenden Crawler geben, auf dem Sie aufbauen können.
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/
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
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).
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.
Ich persönlich finde http://github.com/shuber/curl/tree/master und http://simplehtmldom.sourceforge.net/ genial für den Einsatz in meiner PHP-Spidering/Scraping-Projekte.
viele Websites nicht zulassen, Curl. Es gibt einen Fehler, der verweigert wurde. – zengr
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.
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 ...
- 1. Webscraping mit Julia?
- 2. Der beste Weg, um PHP-Haken zu tun
- 3. Was ist die beste Bibliothek, um mit Archiven zu arbeiten?
- 4. webscraping mit Phonegap
- 5. mit Monaden zu tun, um Transformationen in Masse zu tun?
- 6. Python - Webscraping mit XPath
- 7. Python Webscraping Liste Manipulation
- 8. Beste Lua OOP-Bibliothek
- 9. Beste Java-Twitter-Bibliothek?
- 10. Webscraping mit VBA morningstar financial
- 11. Was tun, um 100 zu drucken?
- 12. Irgendwelche Bibliotheken, um dies zu tun?
- 13. Beste iCalendar-Bibliothek für Java?
- 14. Beste HTTP-Bibliothek für Java?
- 15. Django - Modell und Serialisierer Klasse, der beste Weg zu tun
- 16. Beste Sprache um Sound zu manipulieren?
- 17. Der beste Ort, um Java-Konfigurationsinformationen zu speichern
- 18. Der beste Weg, um 10.000 Einfügungen in einer SQL-Datenbank zu tun?
- 19. Was ist der beste Weg, um "Anwendungseinstellungen" in Android zu tun?
- 20. Der beste Weg, um TDD in Express-Versionen von Visual Studio (zB VB Express) zu tun
- 21. Hive: Der beste Weg, um inkrementelle Updates auf einer Haupttabelle zu tun
- 22. Der beste Weg, um "/ Blogs /: Jahr /: Monat /: Tag /: Permalink" Routen in Rails zu tun?
- 23. Was ist der beste Weg, um diese Website Umleitung zu tun
- 24. Beste Bibliothek für PHP-Sitzungen
- 25. Skript eine Ruby-Kommandozeilen-App; beste Möglichkeit, dies zu tun?
- 26. Was wäre der beste Weg, dies zu tun Async
- 27. Der beste Weg zu tun: nicht in jQuery?
- 28. C# und cXML - Der beste Weg, es zu tun
- 29. Beste Möglichkeit, Spalten in HTML/CSS zu tun
- 30. Was ist die beste API/Bibliothek für Java, um Cassandra zu verwenden?
Überprüfen Sie [diese Frage] (http://stackoverflow.com/questions/2861/options-for-html-scraping) für alle Ihre Antworten. –