Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

HTML-Parsing und Screen Scraping mit einfachen HTML-DOM-Bibliothek

by
Difficulty:IntermediateLength:MediumLanguages:

German (Deutsch) translation by Max Benjamin (you can also view the original English article)

Wenn Sie brauchen, um zu analysieren, HTML, reguläre Ausdrücke sind nicht der Weg zu gehen. In diesem tutorial werden Sie lernen, wie man ein open-source, leicht gelernt-parser, zu Lesen, zu ändern, und spucken Sie wieder aus HTML-Code aus externen Quellen. Mit nettuts als ein Beispiel, werden Sie lernen, wie man eine Liste von allen Artikeln auf der Website veröffentlicht und zeigen Sie Sie an.


Schritt 1. Vorbereitung

Das erste, was Sie tun müssen ist, laden Sie eine Kopie der simpleHTMLdom Bibliothek frei zur Verfügung von sourceforge.

Es gibt mehrere Dateien im download, aber das einzige, das Sie brauchen, ist die simple_html_dom.php Datei, der rest sind Beispiele und Dokumentation.

Download from Sourceforge

Schritt 2. Parsing-Grundlagen

Diese Bibliothek ist sehr einfach zu bedienen, aber es gibt einige Grundlagen, die Sie überprüfen sollten vor dem setzen es in die Tat umzusetzen.

Laden von HTML

Sie können Ihre erste-Objekt entweder durch laden der HTML-Code aus einem string oder aus einer Datei. Laden einer Datei kann entweder über eine URL oder über Ihr lokales Dateisystem.

Eine Anmerkung von Vorsicht: Die load_file () - Methode delegiert Ihre Aufgabe in PHP file_get_contents. Wenn allow_url_fopen nicht auf true gesetzt ist in der php.ini-Datei, Sie können möglicherweise nicht zum öffnen einer remote-Datei auf diese Weise. Sie könnte fallen immer wieder auf die CURL-Bibliothek zum laden von remote-Seiten in diesem Fall, dann Lesen Sie in der load () - Methode.

Zugriff Auf Informationen

Transforming your HTML

Sobald Sie Ihre DOM-Objekt, können Sie beginnen arbeiten mit, die es durch die Verwendung der find() und anlegen von Sammlungen. Eine Sammlung ist eine Gruppe von Objekten über einen Selektor - syntax ist sehr ähnlich zu jQuery.

In diesem Beispiel HTML, werfen wir einen Blick auf, wie der Zugang zu den Informationen im zweiten Absatz ändern Sie es und geben dann die Ergebnisse.

Mit der find () - Methode gibt immer eine Sammlung (array) von tags, wenn Sie angeben, dass Sie möchten, dass nur das N-te Kind, und als zweiten parameter.

Zeilen 2-4: Laden Sie die HTML-Code aus einem string, wie zuvor erläutert.

Zeile 7: Diese Zeile findet alle tags in der HTML -, und gibt Sie als ein array. Der erste Absatz wird über einen index von 0, und die nachfolgenden Absätze werden entsprechend indiziert.

Zeile 10: Diese greift auf das 2. Element in unserer Sammlung von Absätzen (index 1) und stellt eine Ergänzung zu seiner "innertext" - Attribut. Innertext stellt den Inhalt zwischen den tags, während outertext stellt den Inhalt, einschließlich der tag. Wir könnten ersetzen das tag vollständig mit outertext.

Wir fügen eine weitere Zeile ein, und ändern Sie die Klasse unserer zweiten Absatz-tag.

Der resultierende HTML-Code des speichern-Befehl wäre:

Andere Selektoren

Hier sind einige andere Beispiele von Selektoren. Wenn Sie verwendet haben, jQuery, diese scheinen sehr vertraut.

Das erste Beispiel ist nicht ganz intuitiv - alle Anfragen standardmäßig Rückkehr Sammlungen, auch eine ID-Abfrage, das sollte nur ein einziges Ergebnis. Jedoch, durch die Angabe des zweiten Parameters, wir sagen "nur das erste Element dieser Sammlung".

Dies bedeutet, $single ist ein einzelnes element, dann lieber ein array von Elementen mit einem Element.

Der rest der Beispiele sind selbsterklärend.

Dokumentation

Die vollständige Dokumentation zu der Bibliothek finden Sie auf der Projekt-Dokumentation-Seite.

special properties

Schritt 3. Real-World-Beispiel

Um diese Bibliothek in action, wir gehen an, schreiben Sie eine kurze Skript zu kratzen, die Inhalte der Nettuts website, und produzieren eine Liste der Artikel, die auf der Website von Titel und Beschreibung....nur als ein Beispiel. Schaben ist ein heikler Bereich des web, und sollte nicht durchgeführt werden, ohne Erlaubnis.

Screen Scraping Nettuts

Wir beginnen Sie, indem Sie die Bibliothek und Aufruf der function getArticles mit der Seite möchten wir starten die Analyse. In diesem Fall sind wir, beginnend in der Nähe des Ende und freundlich zu Nettuts' server.

Wir sind auch das deklarieren einer globalen Arrays machen es ganz einfach, sammeln Sie alle Artikel-Informationen an einem Ort. Bevor wir beginnen, analysieren, werfen wir einen Blick auf, wie ein Artikel Inhaltsangabe beschrieben wird, auf Nettuts+.

Dies stellt eine grundlegende post-format auf der Website, einschließlich source-code Kommentare. Warum sind die Kommentare wichtig? Sie gelten als Knoten an den parser.


Schritt 4. Starten des Parsing-Funktion

Wir beginnen ganz einfach, indem Sie behaupten, unsere Globale, die Schaffung einer neuen simple_html_dom-Objekt, lädt dann die Seite, die wir wollen, zu analysieren. Diese Funktion wird aufgerufen werden, sich später, so dass wir es einrichten, akzeptieren Sie die URL als parameter.


Schritt 5. Finden Sie die Informationen, die Wir Wollen

Count The Children

Dies ist das Fleisch der getArticles Funktion. Es geht um einen genaueren Blick nehmen, um wirklich zu verstehen, was geschieht.

Zeile 1: Erstellt ein array von Elementen - DIVS mit der Klasse "Vorschau". Wir haben jetzt eine Sammlung von Artikeln gespeichert in $items.

Zeile 5: $post bezieht sich jetzt auf einen einzelnen div-Klasse Vorschau. Wenn wir uns die original-HTML -, können wir sehen, dass das Dritte Kind ist die H1 enthält den Titel des Artikels. Das nehmen wir und ordnen Sie zu $Artikel[index][0].

Denken Sie daran, beginnen bei 0 und zählen Kommentare, wenn Sie versuchen zu bestimmen, den richtigen index des Kind-Knoten.

Zeile 6: Das sechste Kind von $post . Wir wollen die Beschreibung text aus, so schnappen wir uns das erste Kind ist outertext - das sind unter anderem die Absatz-tag. Einen einzelnen Datensatz in der Artikel sieht jetzt wie folgt aus:


Schritt 6 Paginierung

Das erste, was wir tun, ist zu bestimmen, wie finden Sie unsere nächsten Seite. Auf Nettuts+ werden die URLs sind einfach herauszufinden, aber wir behaupten, Sie nicht sind, und sich den nächsten link über das Parsen.

Find the next page to parse

Wenn wir uns die HTML -, sehen wir Folgendes:

Wenn es eine nächste Seite (und es wird nicht immer sein), finden wir einen Anker mit der Klasse von 'nextpostslink'. Nun, dass Informationen verwendet werden können.

In der ersten Zeile sehen wir, wenn wir finden ein Anker mit der Klasse nextpostslink. Beachte besonders den zweiten parameter für die find(). Dieser gibt an, wollen wir nur das erste element (index 0) der gefundenen Sammlung zurückgegeben. $nächste wird nur mit einem einzigen element, sondern als eine Gruppe von Elementen.

Als Nächstes weisen wir dem link die HREF der Variablen $URL. Dies ist wichtig, weil wir dabei sind, zu zerstören, das HTML-Objekt. Durch eine php5 zirkuläre Verweise Speicherverlust, der aktuelle simple_html_dom-Objekt gelöscht werden müssen und gelöscht, bevor ein weiterer angelegt. Andernfalls könnte es dazu führen, Sie zu Essen, bis alle Ihre verfügbaren Speicher.

Schließlich rufen wir getArticles mit der URL der nächsten Seite. Diese Rekursion endet, wenn es keine weiteren Seiten zu analysieren.


Schritt 7 Ausgabe der Ergebnisse

Zuerst gehen wir zum einrichten ein paar grundlegende stylings. Das ist völlig willkürlich - Sie können Ihre Ausgabe Aussehen, wie Sie wollen.

Final Output

Weiter, wir werden noch ein kleines bisschen PHP in die Seite, um die Ausgabe der zuvor gespeicherten Informationen.

Das Endergebnis ist eine einzelne HTML-Seite mit einer Liste alle Artikel, beginnend auf der Seite, angegeben durch das erste getArticles () - Aufruf.


Schritt 8 Abschluss

Wenn Sie analysieren eine große Menge von Seiten zu sagen, die gesamte Website), kann es länger dauern, dann ist die max execution time erlaubt, die von Ihrem server. Zum Beispiel, läuft aus meiner lokalen Maschine dauert es etwa eine Sekunde pro Seite (einschließlich der Zeit, die zu Holen).

Auf einer Website wie Nettuts, mit einem aktuellen, 78 Seiten, tutorials, dies würde, laufen Sie über eine minute.

Dieses tutorial soll Ihnen den Einstieg mit HTML-parsing. Es gibt andere Methoden, um die Arbeit mit dem DOM, einschließlich PHP-built-in, das Ihnen die Arbeit mit leistungsstarken xpath-Selektoren für die Elemente. Für die einfache und schnelle Handhabung beginnt, finde ich diese library zu einem der besten. Schließen Hinweis, immer daran denken, die Genehmigung zu erhalten, bevor das Schaben einer Website; dies ist wichtig. Vielen Dank für das Lesen!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.