Автоматизация обработки страниц сайта

«Автоматизируйте все на своем пути, оставляя время только для  самого эффективного и приятного» (Кто-то)

Предисловие.

Есть несколько сайтов в разработке. Сайты пока не на основных серверах. Заказчики и сайты на разных континентах. В целях оптимизации доступа к сайтам решено использовать кеширование типа Boost (пример). Получается, что сервер сразу выдает html, без вызова основных php-скриптов CMS. Так как сайты еще дорабатываются, то необходимо часто вносить изменения и обновлять кеш. Ну и желательно отслеживать ошибки верстки (где-то meta тега нет, где-то title пустой и т.д.).

Задача.

Делать вышеописанные действия вручную — не вариант. Необходимо автоматизировать. Так же неплохо бы, не взять какое-то готовое решение, а сделать велосипед самому (самообучение, повышение скиллов и т.д.).

Детальная задача.

Брать каждую ссылку из карты сайта (sitemap.xml) и загружать содержимое данной страницы. Если необходимо, то проверять это содержимое по определенным критериям. Вести логирование выполненных действий. Сохранять отчет о проделанной работе.

Реализация.

Напишем Windows-приложение под .NET 3.5 на C#. Для распарсивания содержимого страниц воспользуемся библиотекой HtmlAgilityPack. Отчеты будут в формате PDF. Для их генерации возьмем библиотеку iTextSharp.

Рис. 1.  Интерфейс. Основное окно.

Рис. 2. Интерфейс. Шпаргалка по правилам.

Про код писать не буду. Кому надо — посмотрят. Остановлюсь на двух моментах — интерфейс и правила для разбора страниц.

Интерфейс.

В первое поле ввода (рис. 1) пишем путь до карты сайта (например, http://kronus.me/sitemap.xml). «http://» указывать обязательно. Если у Вас нет xml-карты сайта, то печально и можно закрыть программу… В поле «Nodes with URL» пишем имя узла, в котором хранится ссылка. Обычно, это loc.

Если Вам необходимо просто пройтись по страничкам, то жмем кнопку «GO!» и понеслась. В консоли (внизу) можно наблюдать прогресс выполнения. Если Вы нажали «GO!», но внезапно поняли, что забыли что-то указать, то жмите «Stop». Кнопка «clear console» очищает поле консоли. Для просмотра справки по правилам разбора (сейчас дойдем и к ним) жмем на крайнюю правую кнопку (со знаком «?»).  Окно справки показано на рис. 2.

Кнопки «save rules», «load_rules» служат для сохранения и загрузки правил соответственно (кэп).

Правила разбора.

Раз уж мы загружаем каждую страничку, то почему бы и не проверить их содержимое? В программе представлено 5 разных веток правил (в скобках указано имя правила в рамках программы):

  1. Проверить код ответа сервера (statuscode). Можно задать как отдельное значение (например, 404), так и диапазон (например, 400-499). Так же можно указать, что нас интересует внешний(страницы с кодами до 400 и после 499) или внутренний диапазон (только страницы с кодами от 400 до 499).
  2. Проверить длину URL страницы (url_length). Так же можно указать конкретное значение или же диапазон (и уточнить, внутренний или внешний).
  3. Проверить наличие определенного элемента на странице (isset). Необходимо указать XPath проверяемого элемента. Если интересен элемент с определенным атрибутом, то его (атрибут стоит указать) отдельно (если не надо, то null). Так же можно указать, что именно нас интересует — наличие или отсутствие такого элемента.
  4. Проверить количество определенных элементов на странице (count). Необходимо указать XPath проверяемого элемента, атрибут (если не нужен, то null), количество, с которым сравниваем и как именно сравнивать (=, >, <).
  5. Проверить размер значения определенного элемента или его атрибута (length). Необходимо указать XPath проверяемого элемента, атрибут (если не нужен, то null) и диапазон допустимых значений длины. Так же можно уточнить, какой диапазон интересует — внутренний или внешний.

В программе заложено два способа ввода правил — через файл (формат CSV) и непосредственно в окне программы. Все, что Вы вводите в окно программы, можно сохранить в файл для повторного использования. Изначально вместе с программой идет образец набора правил. Рассмотрим его:

Рис. 3. Образец правил разбора.

 Первым идет правило про код ответа. Нас интересует диапазон 300-399 и страницы, которые попадают в этот диапазон (последний параметр — true). Параметры идут в порядке — младший код, старший код, флаг диапазона.

Два следующих правила аналогичны. Разница лишь в диапазонах(400-499 и 500-599).

Три этих правила дадут возможность найти все страницы (из тех, что у Вас в карте сайта), которые не возвращают 2хх (SUCCESS).

Четвертое правило идет страницы, url которых больше 117 символов. Параметры идут в порядке — максимальная_длина, минимальная_длина, флаг_диапазона.

Пятое правило ищет страницы, где больше одного тега title. Первым параметром тут передается XPath «//title». Далее (внимание!!!) идет строка, которая ставится в отчет и характеризует этот тег. В данной ситуации — это просто «title». Такая строка идет вторым параметров для всех правил, кроме statuscode. Третьим параметром тут идет атрибут.  В данном случае — null. Потом идет количество (1) и один из трех вариантов сравнения (=, <, >). Раз нас интересуют страницы, где больше одного title, то и знак — «>».

Шестое — это правило про длину содержимого. Тут нас интересуют страницы, где содержимое title больше 120 символов. Порядок параметров — XPath, как будет записан тег в отчете, атрибут (null в данной ситуации), максимальна длина, минимальная длина, флаг диапазона.

Седьмым идет правило isset. Оно проверяет наличие на странице тега meta с атрибутом name равным description (первый параметр) у которого есть атрибут content (третий параметр). Второй параметр  — то, как тег будет записан в отчете. Флаг состояния (четвертый параметр) указывает, что нас интересуют страницы, где такого тега нет (false).

Оставшиеся 4 правила приведем кратко.

Восьмое — в теге meta с атрибутом name равным description проверяется атрибут content. Интересуют страницы, где величина этого атрибута больше 150 символов.

Девятое — ищутся страницы, где нет тега meta с атрибутом name равным keywords, у которого есть атрибут content.

Десятое — в теге meta с атрибутом name равным keywords проверяется атрибут content. Интересуют страницы, где величина этого атрибута больше 150 символов.

Одиннадцатое (последнее) — ищутся страницы, на которых есть больше 250 ссылок.

 

На основе этих примеров можно создавать свои правила. Если Вы при создании правила допустили ошибку (параметры не того типа или не то число параметров), то правило не будет создано. Об этом будет указано в консоли.

Еще раз напомню, что есть справка по правилам (кнопка «?» справа).

Генерация отчета.

Происходит в самом конце (логично). В корне с программой будет создан (или перезаписан, если уже есть!) файл report.pdf, где будут указаны правила и списки страниц для каждого из них (на которых они сработали). Если правило не сработало ни для одной страницы, то оно в отчет не попадет.

Пример отчета.

Как видно из примера — на kronus.me не любят meta-теги :).

Баги.

Есть и такие. Если указать совсем левый url в поле ввода ссылки на карту сайта, то программа может хорошо подвиснуть.

Программа может вылететь, если на момент генерации отчета у Вас будет открыт текущий отчет (именно файл report.pdf из корня программы).

Не совсем баг, но все же — программа прожорливая к ОЗУ (особенно, если страниц в карте сайта под 1000).

Скачать.

Скачать программу. Скачать исходники. Скачать PDF-версию заметки.

, , , , , ,

Оставить комментарий

Top ↑ | Main page | Back