• Парсер по селекторам

  •  

Вступление

Таки да, я созрел для запиливания нового обновления к своему парсеру. К сожалению предыдущая версия для пользователей оказалась не такой дружелюбной, как я бы того хотел. И потому я долго-долго думал над реализацией и в итоге таки написал ее. Представляю вам альтернативный режим работы парсера, а именно — парсинг по jquery селекторам.

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

Описание обновления

Для начала посмотрим на измененный парсер ссылок. Теперь в нем имеется два режима, старый и новый:

Старый режим это парсинг по границам, он никуда не делся, просто переключите флажок и он появится перед вами.

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

Что же касательно самого режима, то вот он:

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

Дальше идет фильтрация содержимого от ненужных блоков:

Как вы видите фильтровать блоки можно по регулярным выражениям или по селекторам, это опять-же, зависит от того что вам удобнее и подходит под ситуацию.

Ко всему прочему имеется и встроенный yandex переводчик:

В качестве приятного дополнения был добавлен так-же загрузчик файлов со страниц. Работает он только! для ссылок с атрибутом href, так что будьте внимательны:

Ну и в качестве своеобразного заключения давайте спарсим какой-нибудь сайт с использованием нового режима и демонстрацией всех возможностей.

Установка обновления

К сожалению при внесении правок понадобилось изменить базу данных парсера, так что теперь, если вы использовали старую версию парсера, вам понадобится выполнить несколько шагов для его активации. Во первых скачайте с этой страницы последнюю версию плагина. Сохраните ту версию плагина, которая у вас работает в данный момент, после чего распакуйте с заменой файлов новую версию плагина.

Теперь перейдите в админку WordPress -> Плагины и там сначала деактивируйте, а потом активируйте aftparser:

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

Давайте в качестве демонстрации спарсим абсолютно любой сайт женской тематики. И так… что мне приходит на ум в данном случае… пусть это будет… да тематика не такая уж простая для мужчины, однако крайне выгодная с точки зрения размещения рекламы и прочих ништяков по причине плохой технической подкованности прекрасной половины человечества.

И так берем мы вот этот сайт из топа — womenparadise.ru

Разумеется я выкладываю вам тут только демонстрацию работы, сам я использовать материалы с этого сайта нигде не собираюсь просто потому что мне и так некогда. Короче воровать контент или нет решать сугубо вам, я бы советовал вам переводить его на украинский тогда это уже будет не такой наглой кражей, скажем так. И парсить сайты не из топа, которые там и так крайне прочно сидят, а с днища ебаного. Я вот щас из топа беру, так что толку от моих действий никакого не будет даже если я выложу такое в интернет.

Начнем со сбора ссылок, мне много не надо штук 100 хватит за глаза для демонстрации.

Тыкаем старт и останавливаем в нужный момент.

Ну вот вы видите, что ссылок у меня собралось 203, но я ждал секунд 20 от силы, теперь надо всю эту хрень отфильтровать. Для этого просто берем и открываем простой фильтр. Ссылки на полноценные посты у нас всегда оканчиваются на .html так что мы возьмем и отфильтруем только те строки где есть .html

Отлично, теперь можно переходить к настройке границ. Если вы до этого хотя-бы мельком, немного, работали с jquery вам будет все очевидно и крайне просто, но если это не так… сейчас все разъясню.

Открываем любой пост и ищем его заголовок, в данно случае это будет название нового материала и у нас тоже!

Тут у нас просто h1 поэтому селектором заголовка будет h1.

Указываем:

Теперь так-же делаем с содержимым материала.

В данном случае мы имеем блок td и class=»news», что в виде селектора будет td.news

 

Теперь тестируем:

Однако можно пойти по другому пути и, например, подсчитать блоки tr до блока с постом после чего выбрать тем блок td (это для продвинутых). Давайте сделаем и так тоже, на всякий случай.

Как мы видим dom структура документа состоит из таблицы.

Где верхний блок имеет id=»dle-content». Будем от него «плясать». В итоге получается:

#dle-content table tbody tr

Блоков tr у нас много,  поэтому подсчитаем каким по счету идет блок контента.

Итого: шестым. Внутри блока tr еще есть один блок td в котором и находится наш материал. Итоговое выражение выйдет таким:

#dle-content table tbody tr[6] td

указываем его как селектор контента

и тестируем

Как вы видите результаты совпадают. Короче говоря есть масса путей, выбирайте свой и делайте.

Теги скриптов удаляются, мусор по возможности удаляется, в будущем чистка от мусора будет дляменя приортитетна, а пока используйте замену. Например те кто внимательно смотрел тест заметили первый блок содержащий <div>       </div> — эта хрень, что логично, мне не нужна.

Давайте ее уберем. Для этого указываем такое регулярное выражение:

<div>\s*<\/div>

в соответствующем поле.

После тестирования блок пропадает.

Отлично, теперь можно просто взять и спарсить материалы. Или сохранить их для отложенного парсинга, тут ничего не изменилось. Но я предпочитаю спарсить и посмотреть на результат.

Вот собственно материалы. Они получились ОЧЕНЬ длинные, чтобы вы понимали, я приложу только часть скрина:

На этом, собственно, все. Используйте парсер с умом. Надеюсь с этими правками у вас все будет работать.

 

 38 комментариев
Страница 1 из 1
    доставка окорочка по городу рудный

    парсинг по jquery селекторам — сомневаюсь, что стало «более дружелюбно» для *масс*

    Евгений

    Ты ещё жив, а что так пишешь редко?

    seoonly.ru

    Спасибо-) Даже почти все понял в коде

    kamaz

    xpath бы еще прикрутить )

    Александр

    Есть проблема!
    Пишет:
    Ошибка сохранения!

    Ошибка!

    [«error»,»\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f!»]

    Вячеслав

    Здравствуйте. Вставляю ссылку в граббер ссылок, нажимаю старт, выпадает окно — «ждите…», и ничего не происходит. В чём может быть косяк?

    Вячеслав

    С ваших примеров — женский сайт, и жж про медицину

    Алексей Владимирович

    А можно как-то сразу задать область для парсинга? Было бы удобно, скажем, сразу вставить ссылку не на весь сайт, а на раздел, допустим: сайт.ру/новости/политика/ — и парсер проходит только по этому разделу. Просто сейчас, если сайт более-менее крупный, слишком долго ждать результатов, потом еще и фильтровать.

    Артур

    Плагин не активируется. Подскажите, из-за чего может выдаваться такое сообщение https://yadi.sk/d/29JPkZaD3KiQEB

    Екатерина

    Подскажите, а какой путь поставить на загрузку картинок для Вордпресс? С указанным селектором для картинок, у меня посты без них.. И нет анонсов.

    Дмитрий

    подскажите, может както настроить чтоб парсились последние актуальные новости, а то у меня заливает 4, 5 давние новости

    Александр

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

    Андрей

    У меня версия WP 4.8 Парсер загрузить не получается. Очень долго длится загрузка, затем просто блокируется доступ к сайту. Как решить эту проблему?

      Андрей

      PS
      Вернее не блокируется, а сбрасывается соединенияе

    Vbil

    После установки возникла ошибка.
    Parse error: syntax error, unexpected …\plugins\aftparser\class\parsersListTable.php on line 219 Подскажи, как ее исправить или в чем проблема?

    prihod

    Приветствую! Перепробовал многое, но решить так и не получилось
    Ошибка!
    Селектор заголовка не указан!
    код донора

    some_text

    в поле «Селектор названия: *» указывал .pageContentSection h1 и просто h1, получаю ошибку.
    Подскажете, в чем причина?

    prihod

    обрезало код
    див.pageContentSection > h1

    Алексей

    aftamat4ik, не подскажешь как исправить ошибку update_option( «aft_proxy_list» ); ?
    Установил на чистый WP и при тестировании получаю (вне зависимости от выбора режима выборки):

    Warning: Missing argument 2 for update_option(), called in /wp-content/plugins/aftparser/async/site_parser_proc.php on line 404 and defined in /wp-includes/option.php on line 285

Реплика на Вячеслав Отменить Реплику