Как узнать, изменился ли парсинговый сайт?
-
22-09-2019 - |
Вопрос
Я использую 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.Ничто другое не сможет сделать это должным образом.