Как узнать, изменился ли очищаемый веб-сайт? - PullRequest
6 голосов
/ 27 марта 2010

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

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

Ответы [ 6 ]

7 голосов
/ 27 марта 2010

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

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

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

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

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

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

2 голосов
/ 29 марта 2012

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

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

2 голосов
/ 28 марта 2010

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

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

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

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

2 голосов
/ 27 марта 2010

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

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

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

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

1 голос
/ 27 марта 2010

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

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

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

0 голосов
/ 27 марта 2010

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

...