Question

J'utilise PHP pour gratter un site Web et recueillir des données. Tout cela est fait sans utiliser regex. J'utilise la méthode de explode () php pour trouver des balises HTML particulières au lieu.

Il est possible que si la structure des changements de site Web (CSS, HTML), les données erronées peuvent être collectées par le grattoir. La question est - comment puis-je savoir si la structure HTML a changé? Comment identifier cette avant de stocker les données dans ma base de données afin d'éviter de mauvaises données stockées.

Était-ce utile?

La solution

Je pense que vous n'avez pas des solutions propres si vous grattant une page où les changements de contenu.

Je l'ai développé plusieurs racleurs python et je sais comment peut être frustrant quand le site est tout simplement un changement subtil de sa mise en page.

Vous pouvez essayer une solution à la mécaniser (ne sais pas la contrepartie php) et si vous êtes chanceux, vous pouvez isoler le contenu que vous avez besoin d'extraire des liens (?).

Une autre approche possibile serait de coder certaines contraintes et les vérifier avant de magasin pour db.

Par exemple, si vous grattant urls, vous devrez vérifier que ce grattoir a parser est formellement une URL valide; même pour l'ID d'entier ou tout ce que vous voulez gratter qui peut être reconnu comme valide.

Si vous racler le texte brut, il sera plus difficile de vérifier.

Autres conseils

Si vous voulez connaître les changements en ce qui concerne la structure, je pense que la meilleure façon est de stocker la structure DOM de votre première page, puis le comparer avec nouveau.

Il y a beaucoup de façon, vous pouvez le faire: - saxparser DomParser etc

J'ai un petit blog qui donnera quelques conseils à ce que je veux dire http: // laissez-eux- c.blogspot.com/2009/04/xml-as-objects-in-oops.html

ou vous pouvez utiliser http://en.wikipedia.org/wiki/Simple_API_for_XML ou DOm analyseur Utility.

En parlant de mon cul ici, mais il est possible que vous voudrez peut-être regarder certains modèles Document Object méthodes PHP.

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

Si mon très, très limité compréhension des DOM est correcte, un changement dans la structure du site HTML changerait le modèle objet de document, mais un changement de contenu simple au sein d'une structure fixe ne serait pas. Donc, si vous pouvez capturer l'état DOM, puis le comparer à racler chacun, vous ne pourriez pas en théorie de déterminer qu'un tel changement a été fait?

(Soit dit en passant, comme je l'ai fait quand je tentais d'obtenir une notification par courrier électronique lorsque les résultats de l'examen de la barre ont été affichées sur une page particulière était juste de comparer les valeurs file_get_contents () Étonnamment, a parfaitement fonctionné:. Pas de faux positifs, et m'a envoyé un email dès que le site a publié le contenu.)

Dépend sur le site, mais vous pouvez compter le nombre d'éléments de page dans la page grattée comme div, les balises de classe et de style, puis en comparant ces totaux contre ceux des écorchures plus tard détecter si la structure de la page a été modifiée.

Un processus similaire pourrait être utilisé pour le fichier CSS où les noms de chaque classe ou chaque identifiant pourraient être extraits à l'aide regex simple, stockées et vérifiées au besoin. Si cette liste a de nouveaux ajouts alors la structure de page a certainement changé quelque part sur le site raclée.

D'abord, dans certains cas, vous pouvez comparer hachages du d'origine au nouveau html. MD5 et SHA1 sont deux hash populaires. Cela peut ou peut ne pas être valable dans toutes les circonstances, mais est quelque chose que vous devriez être au courant. Cela vous dira si quelque chose a changé - contenu, balises, ou quoi que ce soit.

Pour comprendre si la structure a changé, vous devez capturer un histogramme des occurrences d'étiquette, puis de comparer celles-ci. Si vous vous souciez de balises étant hors d'usage, vous devrez alors saisir un arbre des balises et faire une comparaison pour voir si les balises se produisent dans le même ordre. Cela va être très précis à ce que vous voulez atteindre.

PHP simple HTML DOM Parser est un outil qui vous aidera à analyser le HTML.

Explode() n'est pas un analyseur HTML, mais vous voulez savoir sur les changements dans la structure HTML. Cela va être difficile. Essayez d'utiliser un analyseur HTML. Rien d'autre ne pourra le faire correctement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top