Drupal → Parser 2

04.04.2012

Допилил до более-менее рабочего состояния вторую версию парсера. Основные отличия:

  • Парсить можно в любые сущности зарегистрированные на сайте — ноды, термины, пользователи, комментарии, товары и т.д.
  • Работа с сущностями ведётся с помощью Entity metadata wrappers.
  • Поддержка всех, доступных для записи, свойств сущности — автор, статус и т.п.
  • Все файлы, скачанные парсером, сохраняются в кэше (public://parser_cache) и при повторном парсинге берутся из него.

Модуль не совместим с первой версией, поэтому перед установкой анинсталим её, удаляем папку с модулем и устанавливаем вторую версию.

Прямая ссылка на скачку последнего снапшота Parser 2.

Если отписываете о найденных багах, то обязательно прикладывайте экспорт задания.

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

webmasternew
24.01.2019, 23:48

Создал ветку на друпал ру давайте найдем человека кто сможет перенести на Drupal 8 этот супермодуль. Так же если есть желающие скинуться (такие были выше) будет супер!

Добрый день!
Подскажите пожалуйста как для body возвращать значение с языком. Стоит модуль entity_translation и переводы включены через переводы строк, а не созданием отдельных нод для каждого из языка, т.е. поле BODY должно выглядеть так:

array(
  'ru' => array(
    0 => array(
      'value' => HTML_VALUE,
      'summary' => '',
      'format' => 'full_html',
    )
  )
);

А модуль возвращает значение в виде

array(
  'value' => $value, // Текст (text, optional)
  'summary' => $summary, // Сводка (text, optional)
  'format' => $format, // Формат текста (token, optional)
)

Попробуйте перед return добавить

$entity_wrapper = $entity_wrapper->language('ru');

Не проверял.

Гость
30.05.2019, 23:07

А с идеей переноса на Drupal 8 что сейчас? Не удалось? Классный модуль.

Добрый день.
При повторном обходе страниц по крону (через функцию "Периодичность запуска в фоне") возникает ошибка:

Начался парсинг "Модели: Всех типов (часть 1)"Allowed memory size of 268435456 bytes exhausted (tried to allocate 334319 bytes) (line 402 of /public_html/sites/all/modules/xandeadx-parser-14c0157/phpQuery/phpQuery/phpQuery/DOMDocumentWrapper.php).

Модуль Ultimate Cron.
Страницы уже были спарсены и 99% из них находятся в кеше.
Ошибки возникают при разовом обходе примерно ±6000 страниц.
Как можно обойти данную ошибку (без увеличения лимитов на сервере)?

Гавриил
09.08.2019, 08:17

Пытаюсь парсить один сайт, выдает ошибку:
Ошибка при закачке "https://.../catalog": Ошибка открытия сокета ssl://www....:443
что можно сделать?

Гость
17.10.2019, 22:20

Импортировал ноды.
Через поле термина у меня создались новые термины, все ОК.
Но как через другой job parsing отредактировать автоматически созданные термины добавив им некоторые поля?
Спасибо за помощь!

Гость
08.11.2019, 13:37

Здравствуйте.
Я использую парсер для создания товаров в Drupal Commerce. Для этого создал две задачи парсера: первая - создает сущности товаров DC, вторая создает ноды представления товаров. Парсинг запускаю по крону через модуль Elysia Cron. Все работает замечательно на тестовых малых объемах, но товаров очень много и поэтому не возможно сказать точно когда закончит работать первая задача, чтобы запустить вторую.
Два вопроса:
1) Как контролировать порядок запуска и время запуска задач парсера?
2) Можно ли задать каждой задаче свои параметры крона? Или это делать надо так: например, надо чтобы парсер срабатывал один раз в сутки, ночью. Устанавливаю параметры крона 0 3 * * *, первой задаче устанавливаю параметра "Периодичность запуска в фоне" = 86400 (24 часа), первой задаче устанавливаю параметра "Периодичность запуска в фоне" = 90000 (25 часов). В это случае час на срабатывание первой задачи получается наугад устанавливаю.

Валерий
25.11.2019, 12:49

Вчера только все парсилось. Сегодня нажимаю "проверка", а в модалке висит только надпись "Загрузка..." в логах ничего (((

Гость
08.01.2020, 13:36

Гавриил, пт 09/08/2019 - 09:17#
Пытаюсь парсить один сайт, выдает ошибку:
Ошибка при закачке "https://.../catalog": Ошибка открытия сокета ssl://www....:443
что можно сделать?

Добрый день! Такой же вопрос... кто может подсказать, как работать с https://?

Гость
28.08.2020, 04:17

Подскажите, как удалять созданные парсером ноды, которые перестали соответствовать "Коду проверки для дальнейшего парсинга страницы".

Старые страницы нужно постоянно перезаписывать, так как там меняются данные (биржа фриланса - меняются кол-во откликов, время сколько осталось), но когда проект завершён - нельзя откликнуться или удалён - страница 404, то такие страницы нужно как-то удалить автоматом, которые раньше были скачаны, есть решение как именно удалять?

>>Добрый день! Такой же вопрос... кто может подсказать, как работать с https://?

Автор использовал метод drupal_http_request, у которого куча косяков с бесплатными сертификатами, прокси и т.д. Почитайте комментарии в API метода, наверняка найдёте там решение.

Максим
17.01.2021, 13:23

Добрый день!

Вопрос по taxonomy.
Есть код:

$teg = array();
foreach ($doc->find('a.breadcrumbs__link span') as $b) {
    $teg[] = (pq($b)->text());
};
$str = $teg[1];
return array($str);

При проверке все нормально отрабатывает, но при парсинге термины не вставляются в материал. Если вставить произвольный текст

return array('термин');

, вместо переменной массива, то он вставляется в материал. Но у донора все термины разные. В чем ошибка?

Алексей
19.11.2022, 20:31

Добрый день.
Перечитал все комментарии и было упоминание про то, что можно в одну ноду сделать два задания парсера, ты указал ему использовать Remote ID.
Бьюсь уже 2 дня, ни чего не получается, все время создается новая нода.
Помоги мне добрый человек.

Я в первом парсере создаю Remote ID.
А что и где нужно указать во втором, чтобы второй парсер обновлял имеющуюся ноду, а не создавал новую.

@Алексей сделать чтобы два задания обновляли одну ноду нельзя

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