Frage

Ich bin mit PHP eine Website zu kratzen und einige Daten sammeln. Es ist alles ohne Regex getan. Ich bin mit PHP explode () -Methode stattdessen bestimmten HTML-Tags zu finden.

Es ist möglich, dass, wenn die Struktur der Website ändert (CSS, HTML), dann falsche Daten können durch den Schaber gesammelt werden. Die Frage ist also - wie kann ich wissen, ob die HTML-Struktur hat sich geändert? Wie dies zu erkennen, bevor alle Daten zu meiner Datenbank gespeichert werden falsche Daten gespeichert werden, zu vermeiden.

War es hilfreich?

Lösung

Ich glaube, Sie haben noch keine sauberen Lösungen haben, wenn Sie eine Seite, wo Inhaltsänderungen sind Schaben.

Ich habe mehrere Python Schaber entwickelt und ich weiß, wie frustrierend sein kann, wenn die Site macht nur eine subtile Veränderung auf dem Layout.

Sie könnten eine Lösung versuchen a la mechanize (weiß nicht die PHP-Pendant) und wenn Sie Glück haben, können Sie den Inhalt, den Sie extrahieren müssen isolieren (Links?).

Ein weiterer possibile Ansatz Code einige Einschränkungen würde und überprüfen sie vor dem Laden zu db.

Zum Beispiel, wenn Sie Urls sind Schaben, müssen Sie das überprüfen, was Schaber analysiert hat, ist formal eine gültige URL; gleiche für Integer-ID oder was auch immer Sie möchten, dass kratzen kann als gültig anerkannt werden.

Wenn Sie Klartext sind Schaben, wird es schwieriger sein, zu überprüfen.

Andere Tipps

Wenn Sie in Bezug auf Struktur wissen, Veränderungen wollen, glaube ich, der beste Weg, die DOM-Struktur Ihrer ersten Seite zu speichern und es dann mit neuen vergleichen.

Es gibt viel, wie Sie es tun können: - SAXParser DOMParser etc

Ich habe ein kleines Blog, das einige Hinweise geben, was ich meine http: // let-sel- c.blogspot.com/2009/04/xml-as-objects-in-oops.html

oder Sie verwenden können, http://en.wikipedia.org/wiki/Simple_API_for_XML oder DOm Utility-Parser.

Beim Reden aus meinem Arsch hier, aber es ist möglich, Sie könnten bei einigen Document Object Model PHP Methoden suchen.

http://php.net/manual/en/book.dom.php

Wenn meine sehr, sehr begrenzt von DOM Verständnis korrekt ist, eine Änderung in der HTML-Site-Struktur würde das Document Object Model ändern, aber eine einfache Inhaltsänderung innerhalb einer festen Struktur würde nicht. Also, wenn Sie die DOM-Zustand erfassen konnte, und vergleichen Sie es dann an jedem schaben, könnte man nicht theoretisch bestimmen, dass eine solche Änderung vorgenommen wurde?

.

(By the way, die Art, wie ich dies tat, als ich versuchte, eine E-Mail-Benachrichtigung zu erhalten, wenn die barprüfung Ergebnisse auf einer bestimmten Seite veröffentlicht wurden, wurde nur file_get_contents vergleichen () Werte Überraschenderweise funktionierte einwandfrei: Keine Fehlalarme, und schrieb mir, sobald die Website den Inhalt gepostet.)

ist abhängig von der Website, aber man kann die Anzahl der Seitenelemente in der geschabt Seite wie div, Klasse & Style-Tags dann zählen, indem sie diese Summen gegen die Späteren Schrammen Vergleich erkennen, wenn die Seitenstruktur wird geändert.

Ein ähnliches Verfahren könnte für die CSS-Datei verwendet werden, wo die Namen jeder jeder Klasse oder ID extrahiert werden könnten einfache regex, gespeichert und überprüft nach Bedarf. Wenn diese Liste Neuzugänge hat dann hat die Seitenstruktur mit ziemlicher Sicherheit irgendwo auf der Website geändert geschabt wird.

Als erstes wird in einigen Fällen können Sie Hashes des vergleichen wollen Original auf den neuen hTML. MD5 und SHA1 sind zwei beliebte Hashes. Dies kann oder kann nicht unter allen Umständen gültig sein, aber ist etwas, das Sie mit vertraut sein sollten. Dies wird Ihnen sagen, ob sich etwas geändert hat - Inhalt, Tags oder irgendetwas.

Um zu verstehen, wenn die Struktur geändert hat, müßten Sie ein Histogramm der Tag-Ereignisse zu erfassen und dann diejenigen vergleichen. Wenn Sie über Pflege-Tags sind in der falschen Reihenfolge dann würden Sie einen Baum der Tags erfassen müssen und einen Vergleich zu tun, um zu sehen, ob die Tags in der gleichen Reihenfolge auftreten. Das wird sehr spezifisch sein, was Sie erreichen wollen.

PHP Einfacher HTML-DOM-Parser ist ein Werkzeug, mit dem Sie die HTML analysieren helfen.

Explode() ist kein HTML-Parser, aber Sie wollen über Änderungen in der HTML-Struktur kennen. Das wird schwierig sein. Versuchen Sie, einen HTML-Parser verwenden. Nichts sonst in der Lage sein, dies richtig zu machen.

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