Drupal → Модуль Parser — парсинг сайтов

17.06.2011

Описание

Модуль Parser предназначен для парсинга любых html страниц в сущности (ноды, термины, юзеры и т.д.). Собственно на этом описание модуля можно закончить =)

Парсинг

Принцип работы парсера похож на работу поисковиков — он загружает одну из страниц сайта, ищет на ней ссылки и начинает ходить по ним в глубь. Встретив страницу, которая попадает под условие "распарсить эту страницу", модуль создает объект сущности и начинает выполнять пользовательский php код, заполняя поля и свойства. Картинки выкачиваются на сервер, создаются отсутствующие термины, значения приводятся к нужному типу.

Использование

Сразу хочу предупредить, что без знаний php работать с модулем будет крайне затруднительно.

Задания парсера находятся по адресу admin/structure/parser_jobs. По умолчанию там есть только одно — Парсинг шаблонов с drupal.org, которое можно использовать как мануал.

Как начать парсить сайт:

  1. Создаём задание admin/structure/parser_jobs/add.
  2. В поле Стартовый URL указываем начальный адрес. С него парсер начнёт работу.
  3. В поле URL тестовой страницы указываем адрес любой страницы, которая в будущем будет распарсена в ноду. HTML код этой страницы будет использован в качестве полигона.
  4. В поле Глубина указываем глубину, до которой парсер будет шагать по найденным ссылкам (простыми словами, глубина — это количество кликов, которые надо сделать относительно страницы указанной в Стартовый URL, чтобы добраться до страницы с контентом).
  5. Заполняем белый и чёрный список адресов.
  6. В поле Код проверки для дальнейшего парсинга страницы пишем код, который должен вернуть TRUE, если текущая страница попадает под условие "распарсить страницу в ноду".
  7. Указываем тип сущности, которая будут создаваться модулем.
  8. Для каждого поля пишем php код, возвращающий значение поля. В коде можно использовать весь функционал библиотеки phpQuery, парсинг с которой превращается в удовольствие :) С помощью кнопок "проверить" смотрим результат работы кода.
  9. Делаем полный бэкап базы и файлов! При неправильной конфигурации модуль может насоздавать много лишних нод.
  10. Начинаем парсинг.

Модуль запоминает адреса и идентификаторы нод, созданные из этих адресов. При повторном парсинге, модуль лишь обновляет уже существующие ноды.

Скриншот 1
Скриншот 2
Скриншот 3

Скачать модуль
Пример парсинга сайта drupalsn.ru

Написанное актуально для
Parser 7.x-2.x
Похожие записи

Комментарии

Пытаюсь получить список
$product = array();
foreach ($doc->find('.product') as $product) {
$product[] = pq($product)->html();
}
return $product;

Получаю ошибку
Fatal error: Cannot use object of type DOMElement as array in .../public_html/sites/all/modules/parser-master/parser.inc(964) : eval()'d code on line 3

Затупил. Спасибо.
Я получаю список элементов списка.
Как добавить один элемент списка в название и описание.
Итог: в списке 800 элементов - должно получиться 800 статей

Объясняю.
Есть страница поддерживаемых моделей, например, Alcatel http://sigmakey.com/ru/Sigma-Overview/Supported-Models.html?brand=1.
Я спарсил название страницы типа "Alcatel"
Также я спарсил содержимое этой страницы (список поддерживаемых устройств). Пример http://drupal.psweb.ru/
Мне нужно для каждого элемента списка каждой страницы создать одну страницу (статью), об этом я изначально и писал, т.е.
Название материала 1: "Alcatel 4045D" (название спарсенное с страницы + элемент списка)
Содержимое 1: Для разблокировки Alcatel 4045D ....
Название материала2 : "Alcatel 4045X" (название спарсенное с страницы + элемент списка)
Содержимое 2: Для разблокировки Alcatel 4045X ....

сложность в том, что нет описания модуля.
У меня есть массив со списком... Как к нему обратиться? Как с него брать элементы?

по ссылке же есть пример - $doc_element

Спасибо. Все получилось.
Просто изначально не понял способ применения.

И еще тупой вопрос.
Как из этого элемента массива
4045D
Взять значение data-value ?
Спасибо

возможно сделать отложенную публикацию?

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

поиском я умею пользоваться.
меня интересует такая функция в Вашем модуле.

модуль парсит сайты, ничем другим он не занимается

можно ведь добавить функцию отложенной публикации - это одно из составляющих наполнения сайта контентом.
Ваш модуль отличный!!! Но немного новых функций ему не помешают

При создании материала парсер использует текстовый формат Filtered HTML, а мне нужен Full HTML.
Как это сделать?

Добавить комментарий