1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Как спарсить WordPress сайты (и не только) через A-Parser

Тема в разделе "Делимся опытом", создана пользователем Reset, 11 янв 2024.

  1. Reset

    Reset A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 фев 2019
    Сообщения:
    25
    Симпатии:
    39
    Приветствую!

    В этом материале я расскажу как собрать сайты на движке WordPress через A-Parser с минимальным количеством мусора в виде других движков.

    Кроме того такой подход можно использовать для сбора баз на любых движках.

    Основной принцип сбора базы состоит в создании двух заданий —
    • задание №1 парсит поисковые системы по футпринтам
    • задание №2 выполняет проверку спарсенного урла на футпринты WordPress.
    Если вдруг кто не знает, то футпринт это — часть кода, урла или текста на сайте, которая характеризует тот или иной тип сайта

    Вообще, когда у движка уникальная структура URL или какие текстовые блоки, которые трудно изменить, то получить хороший результат можно и за один подход, например — запрос inurl:showthread в Гугл без проблем соберет форумы на SMF , потому что изменить урлы в этом движке очень сложно, а вот убрать футпринт «Powered by Simple Machines» не составляет труда и по этому запросу будет куча мусора.

    Что касается WordPress, то у него нет какой то явной структуры URL к которой можно 100% привязаться при парсинге, хотя возможны варианты.

    В любом случае речь идет о методике, когда 100% привязка к урлам при парсинге поисковой системы невозможна, поэтому создадим задание №1 которое спарсит сайты, которые скорее всего будут WordPress.

    Задание №1 — парсинг WordPress по футпринтам
    Я не стану останавливаться подробно по поводу подбора футпринтов для WordPress при парсинге, так как материал не совсем про это, поэтому я взял самый простой футпринт «Powered by WordPress» и создал обычное задание для парсинга Google.

    [​IMG]

    Мой пресет парсера main (1) это стандартный default, только в подключенными проксями, антикапчей и т.д. т.е. никаких особенных настроек там нету.

    А вот чтоб не дописывать каждый раз к запросу футпринт, я использовал переопределение запроса (2), подробнее об этом написано в документации

    Чтоб на выходе получать только корневой URL, я применил к результату регулярное выражение (3), которое его извлекает и записывает в новый массив $result, который потом и выводится (4)

    Также на скрин не влезла включенная галочка «Опции: уник по строке», чтоб не получать дубликаты в результате.

    При таком подходе пропустятся все WordPress которые находятся в папках, т.е. site.com/blog, но такие ситуации крайне редки, зато результат задания №2 не будет содержать дублей по доменам.

    Запустив этот пресет на сбор ТОР10, мы получим ссылки главные страницы сайтов, которые могут быть WordPress, а могут быть и нет, их фильтрация будет сделана на следующем этапе.

    Код:
    eJx1VN9vGzcM/lcCIUAbzHXsDduDXwrXaLoNWZ3FCfpgp4Zyxztr1kmqxLMdGP7f
    R0rnOzvZnu5I8cdH8iP3AmVYhzsPATCI0XwvXPwXI1ECfrM+ZznMFEIQPeGkD+DZ
    cC5mn0ejL9aWGuihksqI3l7giwPytRvwXuX8onKSf9TgXwrrK4mk2khds9VlVF8s
    xJ3dgof84vnlglMynLAQ4vD/AVMssqv1WcSk6afn9+8uvbVYe71YmHdX4vD01BPJ
    ItwkMOTihv2m5vZxJjfwYDmNitUdfUj6KitOFDIvHeQftu7DZS4R2PCY9aqPOw4m
    81yhskbqlIzb1gF4NOpHxBzQK1OSPXdDQbjxtiI1QgwSW3QEO29aJihMHf3/Tj5i
    VEgdoCcCIb+RBCZ//UIT9BKtnzrGRPq9sGas9S1sQHdmMf6nWumc5jwuyOmPxvG/
    TaZvYhzaEk9T0fy2njC0UaL0afpX55XbW1tS5cZS3VpVCkkOE1sbntOAlGsA1/bt
    K5tV1kObBn0NbXIikQPDXOkGOHad6qyKs8mcKPci2NpnlG4+6M0Fcd9FbGYtmEsN
    OT2UsOOBey9fotzQMj2MxPf3K0QXPo6ur+ffr59+ujq+PaQAincLLQ+4Iax4OlD8
    zJpCldOG+0eUtXmgpZ2aia2cBm4p11MHuO9oOg7N/Floe/7GdRITUIAcCpkwo7U6
    /DlLQZ1XhOpXRlvRCE9zNiEzqfXj/e1rNAGtm5rP3r/iTWSkkEZVUi9MJnFhchqy
    4EAIpSVuU5Fce3Nq2tO0Pz04JMWLQ99HVHo5Nqi+UIBle712sFE6tnkiHWYreQ/Y
    ZP+F1KVOODOfvqgqsDU7/jZIzXTe7gjMsCdoEb1MexdttSWsxLgk0Zb/DjLxheXc
    GnyQa5jRDYtGg0SY4Ig8siTsQ9JEJkV72NEDZTco9cxphdEjZvct5OEglkIgAuag
    I8tYdXYG6ZZx2O74cdp0+QiCP6F90R6/VFbTbWOxoG3LY9WMNUu7N2zwTFaQrcGf
    0WXFjQQTC08jEdvttl/GOfUzOmW9NKL74yB+fjskUzgfyw6yoCfps1USqRyeDFNG
    6zSXkPoamtF0zWMupxrpGCPDJIOcMvD60k9YEycZJzzX5dJYAzsVMCwT7tC1/Vka
    A3mmQZraHRnR8uhOBiJlxw2Z4ZKaGREfDnTG/gl3ibq8ekxc0tEGJzIMD/8CFJKP
    kA==

    Задание №2 — проверка спарсенного урла на футпринты WordPress.
    WordPress тяжело детектится по тексту и структуре урлов, но структура папок его выдает с головой.

    [​IMG]

    Поэтому если в исходном коде страницы ресурсы грузятся из папок wp-content и wp-includes, то считайте это WordPress с вероятностью 99.9% , выглядит это примерно так

    Код:
    <link rel='stylesheet' href='https://site.org/wp-content/themes/petlove/css/nivo-slider.css?ver=6.4.2' media='all' />
    ...
    <script src="https://site.org/wp-content/plugins/cookie-law-info/lite/frontend/js/script.min.js?ver=3.1.7" id="cookie-law-info-js"></script>
    ....
    <script src="https://site.org//wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
    Поэтому в задании №2 A-Parser зайдет на каждый УРЛ, полученный в задании №1 и проверит есть ли в исходном коде искомый текст или нет.

    Сделать это можно используя парсер Net::HTTP вот с такими настройками

    [​IMG]

    Я взял стандартные настройки и

    • отключил прокси (1), это опционально, так мы будем ходить на разные сайты, то бана за частые запросы не будет
    • добавил фильтр (2), который проверяет код страницы на вхождение строки wp-content/themes, если она отсутствует, то сайт не попадет в результат
    • переоопределил результат, нам нужен сайт, который подавали на вход, то есть $query
    • сохранил задание в отдельный пресет (4), об этом ниже.
    Все, можно подавать данные на вход и проверять, парсинг будет очень быстрый, так как сайты в среднем открываются за пару секунд.

    При сборе ТОР10 для трех запросов из Задания №1 из 30 полученных url — осталось 25, я проверил штуки 3 и да — это был WordPress, но тем не менее точность парсинга можно повысить еще выше.

    В данном пресете A-Parser ищет просто вхождение в коде странице, а где оно будет — в подключении стилей или просто в тексте — это уже второй вопрос. Для повышения точности я рекомендую использовать несколько фильтров и/или регулярные выражения, например можно добавить такие строки для поиска просто добавив несколько фильтров.

    Код:
    wp-content/themes
    wp-content/plugins
    wp-includes/js/
    и т.д.
    
    Минус такого подхода — если в момент парсинга сайт будет недоступен, то в базу он тоже не попадет, также сайты с защитой Cloudflare нужно конфигурировать в пресете отдельно.

    Код:
    eJx1VE1z2jAQ/S+aHtqZxDSHXnwjTJm2QzFNSHMgHDTWGlRkSdEHhPH4v3clGRtI
    e9Puvn37tLtSQxy1O7swYMFZkq8aouOZ5ISBg9I9K8OCy/7mdKKkA+nIDdHUWDAh
    YUXm4PL823K5QD+DinqBiIa4owZkUXswhjPAIGdoewvaqLcj2nsqPEIqKiy0Q0bF
    hQODcawauFAJdRTtFFgmVIlaKJcDDTno2zIJHLkt1GAxprTjSmLQgrSk/b+sSpma
    uq7iwPnh1YM5vkjSrtcnQXYasSGq77KuXX3wke5hqdI1YHBP0ZrTOnLidSBEs1T0
    46fMvQUGyhgPcqlIFUJ7h6pPkr9GTVIhNujiYKdG1ehyEAmi2JO6VSeeIIWPub9S
    Dsmd8XBDLCqdUtTB+kAcBXYE20ydMkXsHvobouRYiBnsQQywSH/vuWC4CuMKk753
    if+GFO842v5256VwNAeDGnqWaN0XP4cspmZqc+qF4DV3aNuJ8jLM5TM6dwC6b9k8
    wGploC+TWtAVx/XXIMMaDAMb68F1cYuLoVw6cf0qvim61TohvVziGyvkRNVaQLhW
    4MR38DCsxth2MwhGf+93qZNYIL7N7p0Rp5SwPx4TqTYcV+9LkFdjG89rdpQlFeLp
    YXatxjqlC/nVmKvZxa0gW+e0zUcjfB/UegOMSl5TgT0oPXBZZspsXuQJlYJbjpzm
    uDHK66v4bfo9slLVg9f47MB3XAPjNOBHJIh1sEGS0Mh23f86/W/VnP09edPiXvyx
    i4QJfQwI9OE4bPwE7tq/osq/Xg==
    

    Задание №1 + 2 — обьединяем.
    Остался последний штрих, чтоб не запускать задания отдельно, можно обьединить запуски в один. Для этого нужно в Задании №1 промотать в самый низ, нажать кнопку «Больше опций» и выбрать сохраненный пресет Задания №2 и поставить галочку «Использовать файл результатов для запросов». Если не разобрались, то вот ссылка на документацию

    [​IMG]

    Теперь эту задачу можно запускать одним кликом.

    Happy parsing.
     
    relay, Support Emil, Support Alex и 4 другим нравится это.
  2. Reset

    Reset A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 фев 2019
    Сообщения:
    25
    Симпатии:
    39
    Дополнение 1. Как можно собрать футпринты Wordpress.
    1. Переходим в каталог тем - https://wordpress.org/themes/
    2. Переходите по очереди в каждую тему
    3. Жмете кнопку Preview
    4. Листаете в самый низ, и как правило там авторы оставляют копирайт и ссылку на себя
    5. Забираете этой блок и вот вам футпринт.

    На примере темы https://wordpress.org/themes/kadence/ -> https://wp-themes.com/kadence/ -> "WordPress Theme by Kadence WP"
     
    Rassul, Support, relay и ещё 1-му нравится это.

Поделиться этой страницей