Frage

Ich denke darüber nach, es zu versuchen Wunderschöne Suppe, ein Python-Paket für HTML-Scraping.Gibt es andere HTML-Scraping-Pakete, die ich mir ansehen sollte?Python ist keine Voraussetzung, ich bin eigentlich auch daran interessiert, etwas über andere Sprachen zu erfahren.

Die Geschichte bisher:

War es hilfreich?

Lösung

Das Äquivalent der Ruby-Welt zu Beautiful Soup ist why_the_lucky_stiff's Hprikose.

Andere Tipps

In der .NET-Welt empfehle ich das HTML Agility Pack.Nicht annähernd so einfach wie einige der oben genannten Optionen (wie HTMLSQL), aber sehr flexibel.Damit können Sie schlecht geformtes HTML so bearbeiten, als wäre es wohlgeformtes XML, sodass Sie XPATH verwenden oder einfach über Knoten iterieren können.

http://www.codeplex.com/htmlagilitypack

BeautifulSoup ist eine großartige Möglichkeit für HTML-Scraping.Bei meinem vorherigen Job musste ich viel kratzen und ich wünschte, ich wüsste von BeautifulSoup, als ich anfing.Es ähnelt dem DOM mit viel mehr nützlichen Optionen und ist viel pythonischer.Wenn Sie Ruby ausprobieren möchten, haben sie BeautifulSoup portiert und nennen es RubyfulSoup, aber es wurde seit einiger Zeit nicht mehr aktualisiert.

Weitere nützliche Tools sind HTMLParser oder sgmllib.SGMLParser, die Teil der Standard-Python-Bibliothek sind.Diese funktionieren, indem sie jedes Mal Methoden aufrufen, wenn Sie ein Tag eingeben/beenden und auf HTML-Text stoßen.Sie sind wie Expats, wenn Sie damit vertraut sind.Diese Bibliotheken sind besonders nützlich, wenn Sie sehr große Dateien analysieren möchten und die Erstellung eines DOM-Baums langwierig und teuer wäre.

Reguläre Ausdrücke sind nicht unbedingt erforderlich.BeautifulSoup verarbeitet reguläre Ausdrücke. Wenn Sie also deren Leistungsfähigkeit benötigen, können Sie sie dort nutzen.Ich empfehle BeautifulSoup, es sei denn, Sie benötigen Geschwindigkeit und einen geringeren Speicherbedarf.Wenn Sie einen besseren HTML-Parser für Python finden, lassen Sie es mich wissen.

ich fand HTMLSQL um eine lächerlich einfache Möglichkeit zum Screenscrapen zu sein.Es dauert buchstäblich Minuten, bis man damit Ergebnisse erzielt.

Die Abfragen sind superintuitiv – wie zum Beispiel:

SELECT title from img WHERE $class == 'userpic'

Mittlerweile gibt es einige andere Alternativen, die den gleichen Ansatz verfolgen.

Der Python lxml Die Bibliothek fungiert als Python-Bindung für die Bibliotheken libxml2 und libxslt.Besonders gut gefällt mir die XPath-Unterstützung und das hübsche Drucken der In-Memory-XML-Struktur.Es unterstützt auch das Parsen von fehlerhaftem HTML.Und ich glaube nicht, dass Sie andere Python-Bibliotheken/-Bindungen finden können, die XML schneller als lxml analysieren.

Für Perl gibt es WWW::Mechanize.

Python bietet neben Beatiful Soup mehrere Optionen für das HTML-Scraping.Hier sind einige andere:

  • mechanisieren:ähnlich wie Perl WWW:Mechanize.Bietet Ihnen ein browserähnliches Objekt, mit dem Sie mit Webseiten interagieren können
  • lxml:Python-Bindung an libwww.Unterstützt verschiedene Optionen zum Durchqueren und Auswählen von Elementen (z. B. XPath und CSS-Auswahl)
  • Kratzspur:High-Level-Bibliothek, die Vorlagen zum Extrahieren von Informationen aus HTML verwendet.
  • Pyquery:ermöglicht es Ihnen, jQuery-ähnliche Abfragen für XML-Dokumente durchzuführen.
  • kratzig:ein High-Level-Scraping- und Web-Crawling-Framework.Es kann zum Schreiben von Spidern, zum Data Mining sowie zur Überwachung und automatisierten Tests verwendet werden

„Einfacher HTML-DOM-Parser“ ist eine gute Option für PHP. Wenn Sie mit jQuery- oder JavaScript-Selektoren vertraut sind, werden Sie sich zu Hause fühlen.

Finden Sie es hier

Hier gibt es auch einen Blogbeitrag dazu.

Warum hat noch niemand JSOUP für Java erwähnt? http://jsoup.org/

Der Vorlagenersteller Dienstprogramm von Adrian Holovaty (von Django Fame) verwendet einen sehr interessanten Ansatz:Sie füttern es mit Variationen derselben Seite und es „lernt“, wo sich die „Lücken“ für variable Daten befinden.Es ist nicht HTML-spezifisch und eignet sich daher auch zum Scrapen anderer Klartextinhalte.Ich habe es auch für PDFs und HTML verwendet, die in Klartext konvertiert wurden (mit pdftotext bzw. lynx).

Ich würde zunächst herausfinden, ob die betreffenden Websites einen API-Server oder RSS-Feeds für den Zugriff auf die von Ihnen benötigten Daten bereitstellen.

Ich weiß und liebe Bildschirmschaber.

Screen-Scraper ist ein Tool zum Extrahieren von Daten aus Websites.Screen-Scraper automatisiert:

* Clicking links on websites
* Entering data into forms and submitting
* Iterating through search result pages
* Downloading files (PDF, MS Word, images, etc.)

Häufige Verwendungen:

* Download all products, records from a website
* Build a shopping comparison site
* Perform market research
* Integrate or migrate data

Technisch:

* Graphical interface--easy automation
* Cross platform (Linux, Mac, Windows, etc.)
* Integrates with most programming languages (Java, PHP, .NET, ASP, Ruby, etc.)
* Runs on workstations or servers

Drei Editionen von Screen-Scraper:

* Enterprise: The most feature-rich edition of screen-scraper. All capabilities are enabled.
* Professional: Designed to be capable of handling most common scraping projects.
* Basic: Works great for simple projects, but not nearly as many features as its two older brothers.

Eine andere Option für Perl wäre Web::Scraper das auf Rubys basiert Scrapi.Kurz gesagt: Mit einer schönen und prägnanten Syntax können Sie einen robusten Scraper direkt in Datenstrukturen integrieren.

Besonders einfach ist das Scraping von Stack Overflow Schuhe Und Hprikose.

require 'hpricot'

Shoes.app :title => "Ask Stack Overflow", :width => 370 do
  SO_URL = "http://stackoverflow.com"
  stack do
    stack do
      caption "What is your question?"
      flow do
        @lookup = edit_line "stackoverflow", :width => "-115px"
        button "Ask", :width => "90px" do
          download SO_URL + "/search?s=" + @lookup.text do |s|
            doc = Hpricot(s.response.body)
            @rez.clear()
            (doc/:a).each do |l|
              href = l["href"]
              if href.to_s =~ /\/questions\/[0-9]+/ then
                @rez.append do
                  para(link(l.inner_text) { visit(SO_URL + href) })
                end
              end
            end
            @rez.show()
          end
        end
      end
    end
    stack :margin => 25 do
      background white, :radius => 20
      @rez = stack do
      end
    end
    @rez.hide()
  end
end

Ich hatte einige Erfolge damit HtmlUnit, in Java.Es handelt sich um ein einfaches Framework zum Schreiben von Unit-Tests auf Web-Benutzeroberflächen, das aber auch für das HTML-Scraping nützlich ist.

Ein weiteres Tool für .NET ist MhtBuilder

Es gibt auch diese Lösung: netty HttpClient

Ich verwende Hpricot für Ruby.Als Beispiel ist dies ein Codeausschnitt, den ich verwende, um alle Buchtitel von den sechs Seiten meines HireThings-Kontos abzurufen (da sie anscheinend keine einzige Seite mit diesen Informationen bereitstellen):

pagerange = 1..6
proxy = Net::HTTP::Proxy(proxy, port, user, pwd)
proxy.start('www.hirethings.co.nz') do |http|
  pagerange.each do |page|
    resp, data = http.get "/perth_dotnet?page=#{page}" 
    if resp.class == Net::HTTPOK
      (Hpricot(data)/"h3 a").each { |a| puts a.innerText }
    end
  end
end 

Es ist so ziemlich vollständig.Davor kommen lediglich Bibliotheksimporte und die Einstellungen für meinen Proxy.

Ich habe Beautiful Soup oft mit Python verwendet.Es ist viel besser als die Prüfung regulärer Ausdrücke, da es wie die Verwendung von funktioniert DOM, auch wenn der HTML-Code schlecht formatiert ist.Sie können HTML-Tags und Text mit einfacherer Syntax als reguläre Ausdrücke schnell finden.Sobald Sie ein Element gefunden haben, können Sie es und seine untergeordneten Elemente durchlaufen, was für das Verständnis des Inhalts im Code nützlicher ist als bei regulären Ausdrücken.Ich wünschte, Beautiful Soup hätte es schon vor Jahren gegeben, als ich viel Screenscraping machen musste – das hätte mir viel Zeit und Kopfschmerzen erspart, da die HTML-Struktur so schlecht war, bevor die Leute mit der Validierung begannen.

Obwohl es dafür konzipiert wurde .NETZ Webtests, ich habe das verwendet WatiN Rahmen für diesen Zweck.Da es DOM-basiert ist, ist es ziemlich einfach, HTML, Text oder Bilder zu erfassen.Kürzlich habe ich es verwendet, um eine Liste mit Links von einem zu sichern MediaWiki Abfrage des Namensraums „Alle Seiten“ in eine Excel-Tabelle.Die folgende VB.NET Code-Fragmentierung ist ziemlich grob, aber es funktioniert.


Sub GetLinks(ByVal PagesIE As IE, ByVal MyWorkSheet As Excel.Worksheet)

    Dim PagesLink As Link
    For Each PagesLink In PagesIE.TableBodies(2).Links
        With MyWorkSheet
            .Cells(XLRowCounterInt, 1) = PagesLink.Text
            .Cells(XLRowCounterInt, 2) = PagesLink.Url
        End With
        XLRowCounterInt = XLRowCounterInt + 1
    Next
End Sub

Implementierungen der HTML5-Parsing-Algorithmus: html5lib (Python, Ruby), Validator.nu HTML-Parser (Java, JavaScript;C++ in Entwicklung), Trubel (C), Twintsam (C#;bevorstehende).

Es wäre ein Idiot, Perl nicht zu verwenden.Hier kommen die Flammen.

Steigen Sie auf die folgenden Module ein und beseitigen Sie alle Kratzer.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper

Ich habe benutzt LWP Und HTML::TreeBuilder mit Perl und fand sie sehr nützlich.

Mit LWP (kurz für libwww-perl) können Sie eine Verbindung zu Websites herstellen und den HTML-Code durchsuchen. Sie können das Modul hier erhalten und das O'Reilly-Buch scheint hier online zu sein.

Mit TreeBuilder können Sie einen Baum aus HTML erstellen Dokumentation und Quelle sind verfügbar in HTML::TreeBuilder – Parser, der einen HTML-Syntaxbaum erstellt.

Es könnte jedoch sein, dass mit so einem Ansatz noch zu viel Aufwand verbunden ist.Ich habe mir das nicht angeschaut Modul mechanisieren vorgeschlagen durch eine andere Antwort, also kann ich das durchaus tun.

In Java können Sie verwenden SchlagwortSuppe.

Nun, wenn Sie möchten, dass dies von der Clientseite aus nur mit einem Browser erledigt wird, den Sie haben jcrawl.com.Nachdem Sie Ihren Verschrottungsservice über die Webanwendung entworfen haben (http://www.jcrawl.com/app.html), müssen Sie nur das generierte Skript zu einer HTML-Seite hinzufügen, um mit der Verwendung/Präsentation Ihrer Daten zu beginnen.

Die gesamte Scraping-Logik erfolgt im Browser über JavaScript.Ich hoffe, Sie finden es nützlich.Klicken Sie auf diesen Link, um ein Live-Beispiel zu erhalten, das das extrahiert Aktuelle Nachrichten von Yahoo Tennis.

Sie haben das wahrscheinlich schon, aber ich denke, das ist es, was Sie versuchen:

from __future__ import with_statement
import re, os

profile = ""

os.system('wget --no-cookies --header "Cookie: soba=(SeCreTCODe)" http://stackoverflow.com/users/30/myProfile.html')
with open("myProfile.html") as f:
    for line in f:
        profile = profile + line
f.close()
p = re.compile('summarycount">(\d+)</div>') #Rep is found here
print p
m = p.search(profile)
print m
print m.group(1)
os.system("espeak \"Rep is at " + m.group(1) + " points\""
os.remove("myProfile.html")

Ich habe gemischte Ergebnisse in .NET mit SgmlReader erzielt, der ursprünglich von gestartet wurde Chris Lovett und scheint von aktualisiert worden zu sein MindTouch.

Mir gefällt die ImportXML(URL, XPath)-Funktion von Google Spreadsheets.

Es werden Zellen in der Spalte wiederholt, wenn Ihr XPath-Ausdruck mehr als einen Wert zurückgibt.

Sie können bis zu 50 haben importxml() Funktionen in einer Tabelle.

Das Web-Plugin von RapidMiner ist ebenfalls recht einfach zu verwenden.Es kann Beiträge verfassen, Cookies akzeptieren und die festlegen User-Agent.

Ich hatte auch großen Erfolg damit, Aptanas Jaxer + jQuery zum Parsen von Seiten zu verwenden.Es ist nicht so schnell oder „skriptartig“, aber jQuery-Selektoren + echtes JavaScript/DOM sind auf komplizierteren (oder fehlerhaften) Seiten ein Lebensretter.

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