Вопрос

Я использую PHP для очистки веб-сайта и сбора некоторых данных.Все это делается без использования регулярных выражений.Вместо этого я использую метод PHP Explosed() для поиска определенных HTML-тегов.

Вполне возможно, что если структура сайта изменится (CSS, HTML), парсер может собрать неправильные данные.Итак, вопрос: как узнать, изменилась ли структура HTML?Как определить это перед сохранением каких-либо данных в моей базе данных, чтобы избежать сохранения неправильных данных.

Это было полезно?

Решение

Я думаю, что у вас нет никаких чистых решений, если вы очищаете страницу, на которой меняется контент.

Я разработал несколько парсеров Python и знаю, как может быть неприятно, когда сайт вносит незначительные изменения в свой макет.

Вы можете попробовать решение а-ля механизация (не знаю аналога PHP), и если вам повезет, вы сможете изолировать контент, который вам нужно извлечь (ссылки?).

Другой возможный подход — закодировать некоторые ограничения и проверить их перед сохранением в БД.

Например, если вы очищаете URL-адреса, вам необходимо убедиться, что проанализированный парсером формально является действительным URL-адресом;то же самое для целочисленного идентификатора или чего-либо еще, что вы хотите очистить, и которое может быть признано действительным.

Если вы очищаете простой текст, его будет сложнее проверить.

Другие советы

Если вы хотите узнать об изменениях в структуре, я думаю, что лучший способ — сохранить структуру DOM вашей первой страницы, а затем сравнить ее с новой.

Есть много способов сделать это:- Saxparser Domparser и т. Д.

У меня есть небольшой блог, который даст некоторые указания на то, что я имею в виду.http://let-them-c.blogspot.com/2009/04/xml-as-objects-in-oops.html

или вы можете использовать http://en.wikipedia.org/wiki/Simple_API_for_XML или парсер DOm Utility.

Выражаю здесь свою задницу, но возможно, вы захотите взглянуть на некоторые PHP-методы объектной модели документа.

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

Если мое очень, очень ограниченное понимание DOM верно, изменение структуры сайта HTML приведет к изменению объектной модели документа, но простое изменение контента в рамках фиксированной структуры не приведет к изменению.Итак, если бы вы могли зафиксировать состояние DOM, а затем сравнить его при каждой очистке, не могли бы вы теоретически определить, что такое изменение было сделано?

(Кстати, когда я пытался получить уведомление по электронной почте, когда результаты экзамена на адвоката были опубликованы на определенной странице, я просто сравнивал значения file_get_contents().На удивление, работало безупречно:Никаких ложных срабатываний, и я отправил мне электронное письмо, как только сайт опубликовал контент.)

Зависит от сайта, но вы можете подсчитать количество элементов страницы на очищенной странице, таких как теги div, class и style, а затем, сравнив эти итоги с результатами более поздних очисток, определить, была ли изменена структура страницы.

Аналогичный процесс можно использовать для файла CSS, где имена каждого класса или идентификатора можно извлечь с помощью простого регулярного выражения, сохранить и проверить по мере необходимости.Если в этом списке есть новые дополнения, то структура страницы почти наверняка изменилась где-то на сканируемом сайте.

Во-первых, в некоторых случаях вам может потребоваться сравнить хеши оригинала в новый HTML.MD5 и SHA1 — два популярных хеша.Это может быть действительным, а может и не быть действительным при любых обстоятельствах, но вам следует знать об этом.Это сообщит вам, изменилось ли что-то — контент, теги или что-то еще.

Чтобы понять, изменилась ли структура, вам нужно будет составить гистограмму вхождений тегов, а затем сравнить их.Если вас беспокоит, что теги не в порядке, вам придется записать дерево тегов и провести сравнение, чтобы увидеть, встречаются ли теги в одном и том же порядке.Это будет очень конкретно зависеть от того, чего вы хотите достичь.

Простой PHP-парсер HTML DOM это инструмент, который поможет вам анализировать HTML.

Explode() не является анализатором HTML, но вы хотите знать об изменениях в структуре HTML.Это будет сложно.Попробуйте использовать парсер HTML.Ничто другое не сможет сделать это должным образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top