Описание
Модуль Parser предназначен для парсинга любых html страниц в сущности (ноды, термины, юзеры и т.д.). Собственно на этом описание модуля можно закончить =)
Принцип работы парсера похож на работу поисковиков — он загружает одну из страниц сайта, ищет на ней ссылки и начинает ходить по ним в глубь. Встретив страницу, которая попадает под условие "распарсить эту страницу", модуль создает объект сущности и начинает выполнять пользовательский php код, заполняя поля и свойства. Картинки выкачиваются на сервер, создаются отсутствующие термины, значения приводятся к нужному типу.
Использование
Сразу хочу предупредить, что без знаний php работать с модулем будет крайне затруднительно.
Задания парсера находятся по адресу admin/structure/parser_jobs
. По умолчанию там есть только одно — Парсинг шаблонов с drupal.org, которое можно использовать как мануал.
Как начать парсить сайт:
- Создаём задание
admin/structure/parser_jobs/add
. - В поле Стартовый URL указываем начальный адрес. С него парсер начнёт работу.
- В поле URL тестовой страницы указываем адрес любой страницы, которая в будущем будет распарсена в ноду. HTML код этой страницы будет использован в качестве полигона.
- В поле Глубина указываем глубину, до которой парсер будет шагать по найденным ссылкам (простыми словами, глубина — это количество кликов, которые надо сделать относительно страницы указанной в Стартовый URL, чтобы добраться до страницы с контентом).
- Заполняем белый и чёрный список адресов.
- В поле Код проверки для дальнейшего парсинга страницы пишем код, который должен вернуть TRUE, если текущая страница попадает под условие "распарсить страницу в ноду".
- Указываем тип сущности, которая будут создаваться модулем.
- Для каждого поля пишем php код, возвращающий значение поля. В коде можно использовать весь функционал библиотеки phpQuery, парсинг с которой превращается в удовольствие :) С помощью кнопок "проверить" смотрим результат работы кода.
- Делаем полный бэкап базы и файлов! При неправильной конфигурации модуль может насоздавать много лишних нод.
- Начинаем парсинг.
Модуль запоминает адреса и идентификаторы нод, созданные из этих адресов. При повторном парсинге, модуль лишь обновляет уже существующие ноды.
Комментарии
Пытаюсь получить список
$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
у вас две одинаковых переменных
http://www.php.su/php/
Затупил. Спасибо.
Я получаю список элементов списка.
Как добавить один элемент списка в название и описание.
Итог: в списке 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 ?
Спасибо
<span class="product" data-value="3996">4045D</span>
->find('.product')->attr('data-value')
https://code.google.com/archive/p/phpquery/wikis/Manual.wiki
спасибо
возможно сделать отложенную публикацию?
Что это?
размещение статьи в определенное время в будущем.
например, мне не нужно, чтобы сразу появились все созданные парсером страницы (статьи) - поисковики могут обидеться от нескольких тысяч новых статей.
мне нужно указать периодичность (точное время) публикации каждой статьи, например каждые 3 часа
https://www.google.ru/search?q=drupal+отложенная+публикация
поиском я умею пользоваться.
меня интересует такая функция в Вашем модуле.
модуль парсит сайты, ничем другим он не занимается
можно ведь добавить функцию отложенной публикации - это одно из составляющих наполнения сайта контентом.
Ваш модуль отличный!!! Но немного новых функций ему не помешают
При создании материала парсер использует текстовый формат Filtered HTML, а мне нужен Full HTML.
Как это сделать?
прочитать описание поля
Спасибо з отличный модуль , очень жду доработки для Drupal 8
https://www.drupal.org/project/content_parser
Добавить комментарий