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

Парсинг тематических доменов по ключевой фразе из Google и получение различных параметров по доменам

Парсинг тематических доменов по ключевой фразе из Google и получение различных параметров по доменам

  1. Support Alex
    Минимальная версия A-Parser:
    1.2
    Cтатья - это краткий пересказ видео, кому как удобнее воспринимать материал.



    В данной статье будем собирать тематические домены по ключевой фразе (для примера возьмем "essay writing") из поисковой выдачи Google, будем парсить не ТОП 1000, а гораздо больше при помощи буквенных подстановок к запросу. Потом будем получать для доменов различные параметры:
    • зарегистрирован домен или нет
    • дата регистрации и дата окончания регистрации домена
    • язык сайта
    • title и description
    • индекс качества сайта
    • позицию в глобальном рейтинге Alexa
    • cтрану с наибольшим числом трафика по Alexa
    • позицию в рейтинге этой страны по Alexa
    Аналогичным способом можно парсить сайты по любой тематике (товары, медикаменты, кредиты и прочее) или например, можно будет определить дропов, по ключам выпарсить домены, посмотреть по whois какие домены свободны и получить еще дополнительные метрики-пузомерки для них.

    По нашему запросу получили 240 226 доменов через макросы подстановок к запросу {az:a:zzz}, но можно поставить {az:a:zzzz} что гораздо больше, а также есть возможность добавить много других вариантов подстановок (например, {num:1:100000} и {az:а:яяя}).

    [​IMG]

    Скорость парсинга Google при наличии проксей A-Parser, при 100 потоках в среднем 160 запросов в минуту на момент написания статьи, в целом скорость может меняться как в большую, так и в меньшую стороны.

    При использовании проксей nosok.org в 1000 потоков скорость в среднем будет больше 3000 запросов в минуту (скрин ниже).

    [​IMG]

    1. Настраиваем первый пресет. В нем будем парсить поисковую систему Google. Выбираем парсер SE::Google SE::Google.

    Выбираем опцию Request retries (эта опция отвечает за количество повторных запросов, если прокси забанен или не работает). Устанавливаем значение, например 1000. Чем больше значение тем больше вероятность, что найдется рабочий прокси.

    [​IMG]

    Выбираем опцию Pages count и Links per page (которые означают соответственно кол-во страниц и результатов на странице в поисковой выдаче). Так как нужно собрать максимум результатов, то устанавливаем 10 страниц и 100 результатов на странице.

    [​IMG]

    [​IMG]

    Выбираем опцию Добавить уникализацию, будет происходить уникализация на выбранном результате. Устанавливаем в выпадающем списке переменную:
    Код:
    $serp.link
    (массив serp, link - ссылки из результата выдачи) и ТИП уникальности - Домен верхнего уровня (Уникализация будет идти по главному домену с учетом региональных, коммерческих, образовательных и прочих доменов, без учета поддоменов). Переключатель "Глобально" не устанавливаем, так как используется всего 1 парсер в данном случае. Подробнее про опцию уникальности можно прочитать в документации.

    [​IMG]

    Нажимаем на кнопку Конструктор результатов. Выбираем переменную:
    Код:
    $p1.serp.$i.link - Link
    p1 - это парсер первый, массив serp, линк - ссылки из результата выдачи Google. Тип устанавливаем Extract Domain (Выделение домена из ссылки), массив и значение соответственно установятся по умолчанию, но если необходимо, то их можно изменить.

    [​IMG]

    Значение Формат результата оставляем p1.preset.

    Запрос размножаем при помощи макросов подстановок. Так как поисковые системы обычно не дают получить 1000 результатов из выдачи, в зависимости от запросов. К запросу добавляем:
    Код:
    {az:a:zzz}
    [​IMG]

    В разделе Результаты пишем имя файла, куда будут сохраняться результаты.

    [​IMG]

    Сохраняем пресет.

    Запустим задание и пока оно работает будем составлять настройки второго задания.

    2. Настраиваем второй пресет. Будем собирать параметры по доменам из доступных готовых парсеров.

    Выбираем парсер Net::Whois Net::Whois и при помощи него собираем такие параметры как:
    • зарегистрирован домен или нет - переменная $registered
    • дата регистрации - переменная $creation_date
    • дата окончания регистрации домена - переменная $expire_date
    Код:
    $registered
    $creation_date
    $expire_date

    [​IMG]

    Так как используем прокси, то выбираем опцию Request retries (Количество повторных запросов), устанавливаем значение 20. Так как серверы для определенных доменных зон не будут работать (их много, какие то ломаются периодически), а если будет значение например 1000, то скорость парсинга будет очень маленькая.

    Чтобы добавить еще парсеры в пресет необходимо нажать на кнопку Добавить парсер.

    Выбираем парсер HTML::TextExtractor::LangDetect HTML::TextExtractor::LangDetect. Данным парсером будем получать язык сайта (например, русский, английский и т.д.), переменная:
    Код:
    $lang

    [​IMG]

    Так как в качестве запросов у нас будут домены без протоколов, а для данного парсера нужны домены с протоколами, то к нему добавляем опцию Query format и в значение пишем
    Код:
    http://$query
    Теперь для этого парсера запросы будут с протоколом http://, если у какого то из доменов протокол https://, то будет происходить редирект.

    [​IMG]

    [​IMG]

    Добавляем третий парсер Net::HTTP Net::HTTP. Этим парсером будем при помощи регулярных выражений получать с сайтов title и description.

    Как и в предыдущем парсере добавляем опцию Query format и в значение пишем
    Код:
    http://$query
    Выбираем функцию Использовать регулярку и применяем к переменной
    Код:
    $data
    Пишем регулярное выражение для сбора title
    Код:
    <title>(.*?)</title>
    Флаг выбираем is, тип результата указываем Простой и присваиваем переменную title для данного результата.

    Проделываем тоже самое для получения description, пишем регулярное выражение:
    Код:
    <meta\s+name\s*=\s*['"]description['"]\s+content\s*=\s*(['"])(.*?)\1

    [​IMG]

    Добавляем четвертый парсер SE::Yandex::SQI SE::Yandex::SQI, при помощи него определяем индекс качества сайта в Яндексе. Переменную будем использовать для получения индекса качества сайта:
    Код:
    $sqi

    [​IMG]

    Добавляем пятый парсер Rank::Alexa Rank::Alexa. Данным парсером получим следующие параметры:
    • Позицию в глобальном рейтинге Алексы - переменная $rank,
    • Страну с наибольшим числом трафика - переменная $country,
    • Позицию в рейтинге этой страны - переменная $countryrank.
    Код:
    $rank
    $country
    $countryrank
    Чтобы вывести все результаты в таблицу формата CSV, необходимо воспользоваться инструментом форматирования CSV таблиц (которые можно легко импортировать в Excel или Google Sheet) $tools.CSVline (инструменты, которые доступны при использовании шаблонизатора). Внутри скобок перечислим запрос и переменные парсеров, значения которые хотим увидеть в результате:
    Код:
    [% tools.CSVline(query, p1.registered, p1.creation_date, p1.expire_date, p2.lang, p3.title, p3.description, p4.sqi, p5.rank, p5.country, p5.countryrank) %] 

    [​IMG]

    В качестве запроса указываем файл с результатом работы первого пресета по сбору доменов.

    Добавляем имя файла результата, например domain-parametr, так же меняем формат файла с .txt на .csv .

    [​IMG]

    Сохраняем пресет. Указываем в качестве запросов файл с результатом работы первого задания и запускаем задание нажав на кнопку Добавить задание.

    Мы получили следующий результат:

    [​IMG]

    Возможны следующие варианты для расширения пресета, например:
    1. узнать движок сайта
    2. запросить в Google количество страниц в индексе
    3. узнать первое и последнее появления в веб-архиве
    4. проверить наличие в роскомназдоре
    5. и многое другое (так как возможности парсера безграничны).
    Скачать второй пресет - https://a-parser.com/resources/372/
    Gray12 и vipuncle нравится это.