Парсер контента по списку URL на базе Datacol

Парсинг контента довольно распространенная задача. Чаще всего контент парсится по ключевикам или по списку URL.

Задача »

Создать парсер для автоматического получения контента со списка URL. Контент должен очищаться от тегов (кроме тега абзаца p и тега переноса строки br) и знаков табуляции. Экспорт должен производиться в текстовый файл со следующей структурой:

<h1>Заголовок</h1>
<div class="content">Контент</div>
<h1>Заголовок</h1>
<div class="content">Контент</div>
<h1>Заголовок</h1>
<div class="content">Контент</div>

Полученный контент

Демонстрация »

Работу данного профиля настроек вы можете потестировать сразу после установки Datacol. Демонстрационный профиль настроек называется ContentByUrls. Поскольку демо версия Datacol не умеет сохранять результаты в файл, для просмотра результатов после запуска парсера необходимо перейти на вкладку Результаты.

Выбираем и запускаем настроенный парсер

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

Реализация »

Для этого примера я пошагово опишу все действия.

1. Нажимаем в главном окне программы Ctrl+N. Видим окно настроек парсера. В первой вкладке Общие настройки вводим название парсера ContentByUrls и количество потоков 5. Нажимаем Сохранить.

Общие настройки парсера контента по списку URL

2. Переходим на вкладку Начальные URL. Вводим список URL, с которых мы хотим получить контент и устанавливаем Глубину парсинга равной нулю (чтобы парсер собирал контент только с начальных URL и не шел вглубь сайтов). Жмем кнопку Сохранить.

Настройки начальных URL для парсера контента по списку URL

3. Переходим на вкладку Сбор данных. Нам необходимо создать 2 поля: Header (заголовок) и Content (контент). Поскольку мы делаем настройку не под конкретный сайт, а под список URL, и кроме того знаем, что список может меняться, то нет смысла подстраивать парсер под верстку конкретных сайтов. Таким образом, нам для обоих полей необходимо реализовать что-то вроде общего случая. Поэтому здесь можно даже не прибегать к помощи встроенного браузера.

Итак поле, Header. В общем случае заголовок задается тегом h1,h2 или h3, ну или в крайнем случае можно использовать title. Таким образом, для получения заголовка нам нужно вырезать значение тега h1 или h2. Для такого вырезания лучшим образом подойдет XPATH выражение. Выглядеть оно будет так:

//h1|//h2

Теперь введем эти настройки и Добавим поле Header.

Настройка вырезания заголовка для парсера контента по URL

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

Дополнительные настройки сбора данных для парсера контента по URL

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

Пробуем тестировать работу настроек на одном из URL, которые ранее ввели в список начальных:

Тестирование сбора данных для поля

И получаем результат:

Результат тестирования

Теперь необходимо настроить поле Content. Нажимаем кнопку Сохранить, чтобы поле Header сохранилось. Затем нажимаем кнопку Сброс, вводим название нового поля и нажимаем кнопку Добавить. Теперь можно приступать к настройке.

Добавление поля Content

Для поля Content мы будем собирать все блоки все абзацы p.

Настройки поля Content

Также нужно чтобы количество символов в каждом отдельно взятом абзаце (не считая символы, входящие в HTML теги) было не менее 100 (в противном случае велика вероятность того, что мы вырежем рекламный блок или другой мусор). Также они не должны содержать строк, соответствующих регулярным выражениям:

|.*?|.*?|.*?|
&copy;

Первое часто соответствует блокам меню, а второе строкам, содержащим знак копирайта.

Настройка условий для поля Content

Кроме того, если открывающий тег абзаца содержит какие либо аттрибуты (вроде класса), например:

<p class="text">

То нам желательно их исключать, заменяя тег с атрибутами, на тег без атрибутов:

Настройка замен для поля Content

Отсалось ввести настройки на вкладке Дополнительно:

Дополнительные настройки для поля Content

Настройки довольно интуитивны. Уточню только по поводу объединения значений. Поскольку мы отметили эту галочку, все найденные значения поля Content будут объединены в одно в результирующей таблице результатов. «Склеивать» значения поля Content будет перенос строки (%NL% это специальный метатег Datacol, означающий перенос строки в текстовом файле).

Итак, сбор данных мы настроили, теперь переходим на вкладку Навигация. Здесь необходимо создать общий формат URL, который будет соответствовать любому URL, который будет обрабатываться. Для этого оставляем строку соответствия пустой, вводим только название формата (назовем его general). Далее снимаем чекбокс Группировать поля (ведь по логике нашей задачи поля могут вырезаться в независимости друг от друга. Также снимаем чекбокс Содержит ссылки, поскольку мы не собираемся собирать ссылки со страниц для прохода вглубь сайтов. Для данного конкретного случая настройка форматов URL окончена. Не забудьте только нажать кнопку Сохранить.

Теперь можно протестировать сбор данных на одном из URL из начального списка.

Тестирование сбора данных для формата URL

Таким образом, мы получим следующие результаты:

Результаты тестирования формата URL

Теперь осталось настроит экспорт результатов в текстовый файл. Заходим на вкладку Экспорт и добавляем Произвольный формат под названием txtexport.

Произвольный формат экспорта в текстовый файл

Далее переходим на вкладку Произвольный. Здесь необходимо ввести формулу для генерации файла произвольного формата. У нас она будет выглядеть следующим образом:

<h1>%Header%</h1>
<div class="content">%Content%</div>

Здесь же вводим название файла, расширение, а также указываем путь к папке для сохранения. В результате значение поля Header и Content с каждой новой страницы будут дописываться в файл contentresults.txt, находящийся в указанной папке.

Настройки генерации файла произвольного формата

Вот таким образом, мы довольно быстро создали довольно универсальный парсер контента. Безусловно, данные настройки нельзя назвать на 100% универсальными, но учитывая возможности и гибкость Datacol их можно легко усовершенствовать, чтобы в результате получить парсер контента, который будет правильно собирать контент практически с любых URL. Заметьте, что при этом вам нужно будет всего лишь менять набор начальных URL.

Файл профиля настроек для парсер контента по списку URL можно просмотреть здесь. Его также можно сохранить себе на компьютер и скопировать в папку с профилями настроек Datacol (ее можно открыть нажав Ctrl+E в главном окне программы). Это на случай, если вы удалили демонстрационный профиль, который создается при установке программы.