Парсинг. что это и где используется

Содержание

Возможные настройки#

important
Название параметра Значение по умолчанию Описание
Good status All Выбор какой ответ с сервера будет считается успешным. Если при парсинге будет другой ответ от сервера, то запрос будет повторен с другим прокси
Good code RegEx Возможность указать регулярное выражения для проверки кода ответа
Method GET Метод запроса
POST body Контент для передачи на сервер при использовании метода POST. Поддерживает переменные – URL запроса, – исходный запрос и — номер страницы при использовании опции Use Pages.
Cookies Возможность указать cookies для запроса.
User agent Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Заголовок User-Agent при запросе страниц
Additional headers Возможность указать произвольные заголовки запроса с поддержкой возможностей шаблонизатора и использованием переменных из конструктора запросов
Read only headers Читать только заголовки. В некоторых случаях позволяет экономить трафик, если нет необходимости обрабатывать контент
Detect charset on content Распознавать кодировку на основе содержимого страницы
Emulate browser headers Эмулировать заголовки браузера
Max redirects count 7 Максимальное кол-во редиректов, по которым будет переходить парсер
Max cookies count 16 Максимальное число cookies для сохранения
Bypass CloudFlare Автоматический обход проверки CloudFlare
Follow common redirects Позволяет делать редиректы http <-> https и www.domain <-> domain в пределах одного домена в обход лимита Max redirects count
Engine HTTP (Fast, JavaScript Disabled) Позволяет выбрать движок HTTP (быстрее, без JavaScript) или Chrome (медленнее, JavaScript включен)
Chrome Headless Если опция включена, браузер не будет отображаться
Chrome DevTools Позволяет использовать инструменты для отладки Chromium
Chrome Log Proxy connections Если опция включена, в лог будет выводиться информация по подключениям chrome
Chrome Wait Until networkidle2 Определяет, когда страница считается загруженной. Подробнее о значениях.
Use HTTP/2 transport Определяет, использовать ли HTTP/2 вместо HTTP/1.1. Например, Google и Majestic сразу банят, если использовать HTTP/1.1.
Don’t verify TLS certs Отключение валидации TLS сертификатов
Bypass CloudFlare with Chrome(Experimental) Обход CF через Chrome
Bypass CloudFlare with Chrome Max Pages Макс. кол-во страниц при обходе CF через Chrome

Парсеры поисковых систем#

Название парсера Описание
SE::Google Парсинг всех данных с поисковой выдачи Google: ссылки, анкоры, сниппеты, Related keywords, парсинг рекламных блоков. Многопоточность, обход ReCaptcha
SE::Yandex Парсинг всех данных с поисковой выдачи Yandex: ссылки, анкоры, сниппеты, Related keywords, парсинг рекламных блоков. Максимальная глубина парсинга
SE::AOL Парсинг всех данных с поисковой выдачи AOL: ссылки, анкоры, сниппеты
SE::Bing Парсинг всех данных с поисковой выдачи Bing: ссылки, анкоры, сниппеты, Related keywords, Максимальная глубина парсинга
SE::Baidu Парсинг всех данных с поисковой выдачи Baidu: ссылки, анкоры, сниппеты, Related keywords
SE::Baidu Парсинг всех данных с поисковой выдачи Baidu: ссылки, анкоры, сниппеты, Related keywords
SE::Dogpile Парсинг всех данных с поисковой выдачи Dogpile: ссылки, анкоры, сниппеты, Related keywords
SE::DuckDuckGo Парсинг всех данных с поисковой выдачи DuckDuckGo: ссылки, анкоры, сниппеты
SE::MailRu Парсинг всех данных с поисковой выдачи MailRu: ссылки, анкоры, сниппеты
SE::Seznam Парсер чешской поисковой системы seznam.cz: ссылки, анкоры, сниппеты, Related keywords
SE::Yahoo Парсинг всех данных с поисковой выдачи Yahoo: ссылки, анкоры, сниппеты, Related keywords, Максимальная глубина парсинга
SE::Youtube Парсинг данных с поисковой выдачи Youtube: ссылки, название, описание, имя пользователя, ссылка на превью картинки, кол-во просмотров, длина видеоролика
SE::Ask Парсер американской поисковой выдачи Google через Ask.com: ссылки, анкоры, сниппеты, Related keywords
SE::Rambler Парсинг всех данных с поисковой выдачи Rambler: ссылки, анкоры, сниппеты
SE::Startpage Парсинг всех данных с поисковой выдачи Startpage: ссылки, анкоры, сниппеты

Программы для парсинга

Расширения для браузера

Веб-приложения используют для простых задач. Такие расширения есть в каждом браузере. Они удобны для анализа маленького объема данных (до нескольких страниц). 

Data Scraper

Этот инструмент используют для извлечения данных из таблиц или информации со страницы в форматах XLS, CSV и TSV. Платный доступ добавляет новые функции. Например, API и анонимные IP.  

Стоимость: бесплатно при просмотре до 500 страниц.

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

В Scraper.AI доступна функция регулярного мониторинга изменений на веб-странице. Собранная информация экспортируется в форматы JSON, CSV и XLSX.   

Стоимость: бесплатно первые 3 месяца, пакеты — от $49 до $249 в месяц.

Облачные сервисы

По сравнению с расширениями, у этих программ больше функций. Работа проходит в «облаке» через веб-интерфейс или API, а на компьютере сохраняются только результаты.

Scraper API

Этот сервис применяют для парсинга сайтов с высокой степенью защиты.  Его использование требует навыков программирования. 

Программа самостоятельно повторяет неуспешные запросы и обрабатывает капчу. А также приложение может визуализировать элементы, которые требуют рендеринга Javascript. Scraper API работает с Python, Ruby и PHP.  

Стоимость: 1 тыс. бесплатных запросов API, пакеты от $29 до $249 в месяц.

Diffbot 

Он использует ML-алгоритмы и computer vision при парсинге, а также работает с API и может автоматически определить тип URL-адресов. Diffbot регулярно парсит сеть и сохраняет результаты. Компания строит самый большой граф знаний — она соединяет факты о созданных продуктах, новостных событиях, результатах отчетов. Узнать больше о Diffbot можно здесь.  

Стоимость: бесплатно первые 14 дней, пакеты Start и Plus — $299 и $899 в месяц.

Десктопные программы

Большинство десктоп-парсеров работают с Windows, но на macOS их можно запустить с виртуальных машин. Есть и кроссплатформенные решения. 

Десктопные парсеры могут быть эффективнее облачных. Минус в том, что они используют операционную мощность компьютера.  

ParseHub

Программа позволяет интегрировать и визуализировать собранные данные с помощью BI-системы Tableau. Поддерживает графический интерфейс обработки данных . У ParseHub есть функция запланированного сбора датасета в установленный интервал времени. Сервис работает с Windows, Mac и Linux. Доступен в облачной и десктопной версии. 

Стоимость: бесплатно при обработке до 200 страниц, пакеты Standard и Professional — $149 и $499 в месяц.

Библиотеки для создания собственного парсера

Jaunt

Библиотека на Java, которую используют для парсинга и автоматизации запросов в формате JSON. Это формат обмена данных в веб-приложениях, например, для отправки информации с сервера клиенту и отображения на сайте. Jaunt работает как браузер без графического интерфейса, что ускоряет его. В Jaunt обрабатывают выборочные HTTP-запросы и ответы, а еще есть доступ в DOM. 

Стоимость: бесплатно

Scrapy

Библиотека для Python с открытым кодом. Фреймворк используют для парсинга. Особенность Scrapy — обработка запросов в асинхронном порядке: можно задавать команду, не дожидаясь завершения предыдущей. Также следующие запросы будут выполняться, даже если в обработке одного из них возникла ошибка.

В библиотеке можно установить паузу между запросами, а также регулировать число запросов с одного IP или домена. 

Стоимость: бесплатно

Beautiful Soup 

Тоже библиотека на языке Python, но более простая. Обычно фреймворк используют для данных из HTML- и XML-документов. Чтобы открывать ссылки и сохранять собранные результаты, к Beautiful Soup необходимо подключить дополнительные библиотеки.

Стоимость: бесплатно

Сервисы для веб-скрапинга

Скрапинг требует правильного парсинга исходного кода страницы, рендеринга JavaScript, преобразования данных в читаемый вид и, по необходимости, фильтрации… Звучит суперсложно, правда? Но не волнуйтесь — есть множество готовых решений и сервисов, которые упрощают процесс скрапинга.  

Вот 7 лучших инструментов для парсинга сайтов, которые хорошо справляются с этой задачей.

1. Octoparse

Octoparse — это простой в использовании скрапер для программистов и не только.

Цена: бесплатен для простых проектов, но есть и платные тарифы: 75 $ в месяц — стандартный, 209 $ — профессиональный.

Особенности:

  • Работает на всех сайтах: с бесконечным скроллом, пагинацией, авторизацией, выпадающими меню и так далее.
  • Сохраняет данные в Excel, CSV, JSON, API.
  • Данные хранятся в облаке.
  • Скрапинг по расписанию или в реальном времени.
  • Автоматическая смена IP для обхода блокировок.
  • Блокировка рекламы для ускорения загрузки и уменьшения количества HTTP запросов.
  • Можно использовать XPath и регулярные выражения.
  • Поддержка Windows и macOS.

2. ScrapingBee

Сервис ScrapingBee Api использует «безлоговый браузер» и смену прокси. Также имеет API для скрапинга результатов поиска Google.

Цена: бесплатен до 1 000 вызовов API, после чего нужно выбрать платный тариф от 29 $ в месяц.

Особенности:

  • Рендеринг JS.
  • Ротация прокси.
  • Можно использовать с Google Sheets и браузером Chrome.

3. ScrapingBot

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

Цена: бесплатный тариф на 100 кредитов и платные тарифы: 47 $ в месяц для фрилансеров, 120 $ в месяц для стартапов и 361 $ в месяц для бизнеса.

Особенности:

  • Рендеринг JS (безголовый Chrome).
  • Качественный прокси.
  • До 20 одновременных запросов.
  • Геотэги.
  • Аддон Prestashop, интегрирующийся на ваш сайт для мониторинга цен конкурентов.

4. Scrapestack

Scrapestack — это REST API для скрапинга веб-сайтов в реальном времени. Он позволяет собирать данные с сайтов за миллисекунды, используя миллионы прокси и обходя капчу.

Цена: бесплатный тариф до 1 000 запросов и платные тарифы от 19,99 $ в месяц. 

Особенности:

  • Одновременные API запросы.
  • Рендеринг JS.
  • Шифрование HTTPS.
  • Более 100 геолокаций.

5. Scraper API

Scraper API работает с прокси, браузерами и капчей. Его легко интегрировать — нужно только отправить GET запрос к API с вашим API ключом и URL.

Цена: 1000 вызовов API бесплатно, тариф для хобби — 29 $ в месяц, для стартапов — 99 $ в месяц. 

Особенности:

  • Рендеринг JS.
  • Геотэги.
  • Пул мобильных прокси для скрапинга цен, результатов поиска, мониторинга соцсетей и так далее.

6. ParseHub

ParseHub — ещё один сервис для веб-скрапинга, не требующий навыков программирования.

Цена: бесплатный тариф, стандартный тариф — 149 $ в месяц.

Особенности:

  • Понятный графический интерфейс.
  • Экспорт данных в Excel, CSV, JSON или доступ через API.
  • XPath, регулярные выражения, CSS селекторы.

7. Xtract.io

Xtract.io — это гибкая платформа, использующая технологии AI, ML и NLP.

Её можно настроить для скрапинга и структурирования данных сайтов, постов в соцсетях, PDF-файлов, текстовых документов и электронной почты.

Цена: есть демо-версия

Особенности:

  • Скрапинг данных из каталогов, финансовых данных, данных об аренде, геолокационных данных, данных о компаниях и контактных данных, обзоров и рейтингов.
  • Преднастроенная система для автоматизации всего процесса извлечения данных.
  • Очистка и валидация данных по заданным правилам.
  • Экспорт в JSON, текст, HTML, CSV, TSV.
  • Ротация прокси и прохождение капчи для скрапинга данных в реальном времени.

⌘⌘⌘

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

Варианты разбора

  • Решать задачу в лоб, то есть анализировать посимвольно входящий поток и используя правила грамматики, строить АСД или сразу выполнять нужные нам операции над нужными нам компонентами. Из плюсов — этот вариант наиболее прост, если говорить об алгоритмике и наличии математической базы. Минусы — вероятность случайной ошибки близка к максимальной, поскольку у вас нет никаких формальных критериев того, все ли правила грамматики вы учли при построении парсера. Очень трудоёмкий. В общем случае, не слишком легко модифицируемый и не очень гибкий, особенно, если вы не имплементировали построение АСД. Даже при длительной работе парсера вы не можете быть уверены, что он работает абсолютно корректно. Из плюс-минусов. В этом варианте все зависит от прямоты ваших рук. Рассказывать об этом варианте подробно мы не будем.
  • Используем регулярные выражения! Я не буду сейчас шутить на тему количества проблем и регулярных выражений, но в целом, способ хотя и доступный, но не слишком хороший. В случае сложной грамматики работа с регулярками превратится в ад кромешный, особенно если вы попытаетесь оптимизировать правила для увеличения скорости работы. В общем, если вы выбрали этот способ, мне остается только пожелать вам удачи. Регулярные выражения не для парсинга! И пусть меня не уверяют в обратном. Они предназначены для поиска и замены. Попытка использовать их для других вещей неизбежно оборачивается потерями. С ними мы либо существенно замедляем разбор, проходя по строке много раз, либо теряем мозговые клеточки, пытаясь измыслить способ удалить гланды через задний проход. Возможно, ситуацию чуть улучшит попытка скрестить этот способ с предыдущим. Возможно, нет. В общем, плюсы почти аналогичны прошлому варианту. Только еще нужно знание регулярных выражений, причем желательно не только знать как ими пользоваться, но и иметь представление, насколько быстро работает вариант, который вы используете. Из минусов тоже примерно то же, что и в предыдущем варианте, разве что менее трудоёмко.
  • Воспользуемся кучей инструментов для парсинга BNF! Вот этот вариант уже более интересный. Во-первых, нам предлагается вариант типа lex-yacc или flex-bison, во вторых во многих языках можно найти нативные библиотеки для парсинга BNF. Ключевыми словами для поиска можно взять LL, LR, BNF. Смысл в том, что все они в какой-то форме принимают на вход вариацию BNF, а LL, LR, SLR и прочее — это конкретные алгоритмы, по которым работает парсер. Чаще всего конечному пользователю не особенно интересно, какой именно алгоритм использован, хотя они имеют определенные ограничения разбора грамматики (остановимся подробнее ниже) и могут иметь разное время работы (хотя большинство заявляют O(L), где L — длина потока символов). Из плюсов — стабильный инструментарий, внятная форма записи (БНФ), адекватные оценки времени работы и наличие записи БНФ для большинства современных языков (при желании можно найти для sql, python, json, cfg, yaml, html, csv и многих других). Из минусов — не всегда очевидный и удобный интерфейс инструментов, возможно, придется что-то написать на незнакомом вам ЯП, особенности понимания грамматики разными инструментами.
  • Воспользуемся инструментами для парсинга PEG! Это тоже интересный вариант, плюс, здесь несколько побогаче с библиотеками, хотя они, как правило, уже несколько другой эпохи (PEG предложен Брайаном Фордом в 2004, в то время как корни BNF тянутся в 1980-е), то есть заметно моложе и хуже выглажены и проживают в основном на github. Из плюсов — быстро, просто, часто — нативно. Из минусов — сильно зависите от реализации. Пессимистичная оценка для PEG по спецификации вроде бы O(exp(L)) (другое дело, для создания такой грамматики придется сильно постараться). Сильно зависите от наличия/отсутствия библиотеки. Почему-то многие создатели библиотек PEG считают достаточными операции токенизации и поиска/замены, и никакого вам AST и даже привязки функций к элементам грамматики. Но в целом, тема перспективная.

await this.cookies.*#

Работа с cookies для текущего запроса

Получение массива cookies

awaitthis.cookies.getAll();

Скопировать

Установка cookies, в качестве аргумента должен быть передан массив с cookies

asyncparse(set, results){

this.logger.put(«Start scraping query: «+set.query);

awaitthis.cookies.setAll(‘test_1=1′,’test_2=2’);

let cookies =awaitthis.cookies.getAll();

this.logger.put(«Cookies: «+JSON.stringify(cookies));

results.SKIP=1;

return results;

}

Скопировать

— установка одиночного cookie

asyncparse(set, results){

this.logger.put(«Start scraping query: «+set.query);

awaitthis.cookies.set(‘.a-parser.com’,’/’,’Test-cookie-1′,1);

awaitthis.cookies.set(‘.a-parser.com’,’/’,’Test-cookie-2′,’test-value’);

let cookies =awaitthis.cookies.getAll();

this.logger.put(«Cookies: «+JSON.stringify(cookies));

results.SKIP=1;

return results;

}

Скопировать

Чек-лист по выбору парсера

Краткий чек-лист, который поможет выбрать наиболее подходящий инструмент или сервис.

  1. Четко определите, для каких задач вам нужен парсер: анализ SEO конкурентов или мониторинг цен, сбор данных для наполнения каталога, съем позиций и т.д.
  2. Определите, какой объем данных и в каком виде нужно получать.
  3. Определите, как часто вам нужно собирать данные: единоразово или с определенной периодичностью (раз в день/неделю/месяц).
  4. Выберите несколько инструментов, которые подходят для решения ваших задач. Попробуйте демо-версии. Узнайте, предоставляется ли техническая поддержка (желательно даже протестировать ее — задать парочку вопросов и посмотреть, как быстро вы получите ответ и насколько он будет исчерпывающим).
  5. Выберите наиболее подходящий сервис по соотношению цена/качество.

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

Парсите страницы сайтов в структуры данных

Что такое Диггернаут и что такое диггер?

Диггернаут — это облачный сервис для парсинга сайтов, сбора информации и других ETL (Extract, Transform, Load) задач. Если ваш бизнес лежит в плоскости торговли и ваш поставщик не предоставляет вам данные в нужном вам формате, например в csv или excel, мы можем вам помочь избежать ручной работы, сэкономив ваши время и деньги!

Все, что вам нужно сделать — создать парсер (диггер), крошечного робота, который будет парсить сайты по вашему запросу, извлекать данные, нормализовать и обрабатывать их, сохранять массивы данных в облаке, откуда вы сможете скачать их в любом из доступных форматов (например, CSV, XML, XLSX, JSON) или забрать в автоматическом режиме через наш API.

Какую информацию может добывать Диггернаут?

  • Цены и другую информацию о товарах, отзывы и рейтинги с сайтов ритейлеров.
  • Данные о различных событиях по всему миру.
  • Новости и заголовки с сайтов различных новостных агентств и агрегаторов.
  • Данные для статистических исследований из различных источников.
  • Открытые данные из государственных и муниципальных источников. Полицейские сводки, документы по судопроизводству, росреест, госзакупки и другие.
  • Лицензии и разрешения, выданные государственными структурами.
  • Мнения людей и их комментарии по определенной проблематике на форумах и в соцсетях.
  • Информация, помогающая в оценке недвижимости.
  • Или что-то иное, что можно добыть с помощью парсинга.

Должен ли я быть экспертом в программировании?

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

Если вы программист или веб-разработчик, знаете что такое HTML/CSS и готовы к изучению нового, для вас мы приготовили мета-язык, освоив который вы сможете решать очень сложные задачи, которые невозможно решить с помощью конфигуратора Excavator. Вы можете ознакомиться с документацией, которую мы снабдили примерами из реальной жизни для простого и быстрого понимания материала.

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

Этапы парсинга сайтов

Если рассматривать процедуру парсинга данных кратко (не вдаваясь в технические детали работы парсера), то здесь можно отметить такие этапы:

  1. Пользователь запускает парсер и задает критерии поиска: например, все цены, характеристики, изображения или другой вид данных на одном или нескольких сайтах.
  2. Программа выполняет анализ сайта (или всех сайтов в интернете) и сбор необходимой информации.
  3. После сбора данных парсер переходит к их сортировке и систематизации, параметры которых также определяются перед запуском кампании.
  4. В финале программа формирует отчет в заданном формате и предоставляет пользователю возможность скачать его на свой компьютер или другое устройство (PDF, RAR, TXT и т.д.).

Установка нескольких копий на одном ПК или сервере#

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

Процесс установки нескольких копий парсера на одной системе:

  • необходимо скачать и установить каждую копию в отдельный каталог согласно стандартной инструкций по установке
  • в каждой копии парсера необходимо в каталоге config создать файл config.txt и прописать настройку такого вида:

bind: 0.0.0.0:9092

Скопировать

вместо 9092 укажите порт, на котором будет работать данная копия

После этого парсер можно запускать и он будет доступен на указанному порту

caution

Любые способы совместного доступа, а также сдача A-Parser в аренду запрещены и в случае обнаружения лицензия будет аннулирована без возврата средств или возможности восстановления.

Установка одной лицензии на несколько компьютеров#

Каждую лицензию можно использовать одновременно только на одном ПК/сервере. При этом, имея одну лицензию, не запрещается устанавливать А-Парсер сразу на несколько компьютеров. Но в этом случае, А-Парсер можно будет запустить только на том ПК/сервере, IP которого прописан в Личном кабинете

Примером такого использования может быть рабочий ПК и домашний ноутбук: парсер можно установить на обеих машинах, а использовать либо на рабочем ПК, либо на домашнем ноутбуке. Количество изменений IP в Личном кабинете неограничено, но не рекомендуется это делать более 5 раз в сутки, т.к. в противном случае может потребоваться подтвердить отсутствие мошеннических действий.

Для одновременной работы A-Parser на нескольких компьютерах или серверах выполните следующие действия:

  1. Добавьте
  2. В Личном кабинете перейдите на вкладку
  3. Впишите IP-адреса дополнительных компьютеров

Возможности#

  • Многостраничный парсинг (переход по страницам)
  • Автоматическая работа с прокси
  • Проверка успешного ответа по коду или по содержимому страницы
  • Поддерживает сжатия gzip/deflate/brotli
  • Определение и преобразование кодировок сайтов в UTF-8
  • Обход защиты CloudFlare
  • Выбор движка (HTTP или Chrome)
  • Опция Check content – выполняет указанное регулярное выражение на полученной странице. Если выражение не сработало, страница будет загружена заново с другой прокси.
  • Опция Use Pages – позволяет перебрать указанное количество страниц с определенным шагом. Переменная содержит текущий номер страницы при переборе.
  • Опция Check next page – необходимо указывать регулярное выражение, которое будет извлекать ссылку на следующую страницу (обычно кнопка «Вперёд»), если она существует. Переход между страницами осуществляется в рамках указанного лимита (0 — без ограничений).
  • Опция Page as new query – переход на следующую страницу происходит в новом запросе. Позволяет убрать ограничение на количество страниц для перехода.

cURL и аутентификация в веб-формах (передача данных методом GET и POST)

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

Использование curl для получения страницы после HTTP аутентификации очень сильно различается в зависимости от конкретного сайта и его движка. Обычно, схема действий следующая:

1) С помощью Burp Suite или Wireshark узнать, как именно происходит передача данных. Необходимо знать: адрес страницы, на которую происходит передача данных, метод передачи (GET или POST), передаваемая строка.

2) Когда информация собрана, то curl запускается дважды – в первый раз для аутентификации и получения кукиз, второй раз – с использованием полученных кукиз происходит обращение к странице, на которой содержаться нужные сведения.

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

Для сохранения кукиз используется опция —cookie-jar, после которой нужно указать имя файла. Для передачи данных методом POST используется опция —data. Пример (пароль заменён на неверный):

curl --cookie-jar cookies.txt http://forum.ru-board.com/misc.cgi --data 'action=dologin&inmembername=f123gh4t6&inpassword=111222333&ref=http%3A%2F%2Fforum.ru-board.com%2Fmisc.cgi%3Faction%3Dlogout' 

Далее для получения информации со страницы, доступ на которую имеют только зарегестрированные пользователи, нужно использовать опцию -b, после которой нужно указать путь до файла с ранее сохранёнными кукиз:

curl -b cookies.txt 'http://forum.ru-board.com/topic.cgi?forum=35&topic=80699&start=3040' | iconv -f windows-1251 -t UTF-8

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

Что такое парсер аудиторий?

Если вручную искать всех людей из целевой аудитории с копированием их контактов в специальные таблицы, то это займёт слишком много времени. Часто такие списки состоят из десятков тысяч людей, численность в 2000-3000 человек для многих сегментов является минимальной. Чтобы автоматизировать парсинг, создаются специальные программы – парсеры.

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

Кроме того, парсеры могут находить не конкретных людей целевой аудитории, а группы и сообщества в инстаграм, instagram, facebook, где общаются потенциальные клиенты.

Критериями для выбора группы являются:

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

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

  • имена, фамилии;
  • пол, возраст;
  • родственные связи, наличие престарелых родителей, а также количество детей (их пол);
  • место жительства, место работы;
  • должность, профессия, образование;
  • подписки на различные группы;
  • любимые книги, музыка, фильмы, другие увлечения;
  • статус (в браке, в поиске, учёба, карьера и прочее);
  • некоторые парсеры могут анализировать фотографии, аудио, видео.

await this.request(method, url[, queryParams][, opts])#

awaitthis.request(method, url, queryParams, opts)

Скопировать

Получение HTTP ответа по запросу, в качестве аргументов указывается:

  • — метода запроса (GET, POST…)
  • — ссылка для запроса
  • — хэш с get параметрами или хэш с телом post-запроса
  • — хэш с опциями запроса

Если используется метод POST, то тело запроса можно передать двумя способами:

просто перечислив названия переменных и их значения в queryParams. Например:

{

key set.query,

id1234,

type ‘text’

}

Скопировать

через переменную body в opts. Например:

body ‘key=’ + set.query + ‘&id=1234&type=text’

Скопировать

— массив условий для проверки получаемого контента, если проверка не проходит, то запрос будет повторен с другим прокси.

Возможности:

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

Для успешного запроса должны пройти все указанные в массиве проверки

let response =awaitthis.request(‘GET’, set.query,{},{

check_content

<\/html>|<\/body>,

‘XXXX’,

‘</html>’,

(data, hdr)=>{

return hdr.Status==200&& data.length>100;

}

});

Скопировать

— автоматическое определение кодировки и преобразование в utf8

Возможные значения:

  • — на основе заголовков, тегов meta и по содержимому страници (оптимальный рекомендуемый вариант)
  • — указывает что документ в кодировке utf8
  • — любая другая кодировка

— хэш с заголовками, название заголовка задается в нижнем регистре, можно указать в т.ч. cookie
Пример:

headers{

accept’image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8′,

‘accept-encoding»gzip, deflate, br’,

cookie’a=321; b=test’,

‘user-agent»Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36’

}

Скопировать

— позволяет переопределить порядок сортировки заголовков

— максимальное число переходов по редиректам, по умолчанию 7, используйте 0 для отключения перехода по редиректам

— число попыток выполнения запроса, по умолчанию берется из настроек парсера

— перечень кодов HTTP ответов, которые парсер будет считать удачными, по умолчанию берется из настроек парсера. Если указать то все ответы будут считаться удачными.
Пример:

parsecodes{

2001,

4031,

5001

}

Скопировать

— таймаут ответа в секундах, по умолчанию берется из настроек парсера

— определяет использовать ли компрессию (gzip/deflate/br), по умолчанию включено (1), для выключения нужно задать значение

— максимальный размер ответа в байтах, по умолчанию берется из настроек парсера

— хэш с куками. Пример хэша:

«cookie_jar»{

«version»1,

«.google.com»{

«/»{

«login»{

«value»»true»

},

«lang»{

«value»»ru-RU»

}

}

},

«.test.google.com»{

«/»{

«id»{

«value»155643

}

}

}

}

Скопировать

— указывает на номер текущей попытки, при использовании этого параметра встроенный обработчик попыток для данного запроса игнорируется

— автоматическая эмуляция заголовков браузера (1 — включено, 0 — выключено)

— переопределяет использование прокси для отдельного запроса внутри JS парсера поверх глобального параметра Use proxy (1 — включено, 0 — выключено)

— отключает добавление Extra query string к урлу запроса (1 — включено, 0 — отключено)

— позволяет скачать файл напрямую на диск, минуя запись в память. Вместо file указывается имя и путь под каким сохранить файл. При использовании этой опции игнорируется все, что связано с data (проверка контента в check_content, response.data будет пустой и т.д.).

— определяет передавать (1) или нет () в ответе data/pages[], может использоваться для оптимизации

— определяет возвращать data как строку String () или как объект Buffer (1), по умолчанию возвращается строка String

— автоматический обход JavaScript защиты CloudFlare используя браузер Chrome (1 — включено, 0 — выключено)

— позволяет переходить по редиректам, объявленным через HTML мета тег:

<metahttp-equiv=»refresh»content=»time; url=…»/>

Скопировать

– позволяет передавать для https соединений

Парсеры сайтов в зависимости от используемой технологии

Парсеры на основе Python и PHP

Такие парсеры создают программисты. Без специальных знаний сделать парсер самостоятельно не получится. На сегодня самый популярный язык для создания таких программ Python. Разработчикам, которые им владеют, могут быть полезны:

  • библиотека Beautiful Soup;
  • фреймворки с открытым исходным кодом Scrapy, Grab и другие.

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

Парсеры-расширения для браузеров

Парсить данные с сайтов могут бесплатные расширения для браузеров. Они извлекают данные из html-кода страниц при помощи языка запросов Xpath и выгружают их в удобные для дальнейшей работы форматы —  XLSX, CSV, XML, JSON, Google Таблицы и другие. Так можно собрать цены, описания товаров, новости, отзывы и другие типы данных.

Примеры расширений для Chrome: Parsers, Scraper, Data Scraper, kimono.

Парсеры сайтов на основе Excel

В таких программах парсинг с последующей выгрузкой данных в форматы XLS* и CSV реализован при помощи макросов — специальных команд для автоматизации действий в MS Excel. Пример такой программы — ParserOK. Бесплатная пробная версия ограничена периодом в 10 дней.

Парсинг при помощи Google Таблиц

В Google Таблицах парсить данные можно при помощи двух функций — importxml и importhtml.

Функция IMPORTXML импортирует данные из источников формата XML, HTML, CSV, TSV,  RSS, ATOM XML в ячейки таблицы при помощи запросов Xpath. Синтаксис функции:

  
IMPORTXML("https://site.com/catalog"; "//a/@href")
IMPORTXML(A2; B2)
  

Расшифруем: в первой строке содержится заключенный в кавычки url (обязательно с указанием протокола) и запрос Xpath.

Знание языка запросов Xpath для использования функции не обязательно, можно воспользоваться опцией браузера «копировать Xpath»:

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

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

У IMPORTHTML более узкий функционал — она импортирует данные из таблиц и списков, размещенных на странице сайта. Синтаксис функции:

  
IMPORTHTML("https://https://site.com/catalog/sweets"; "table"; 4)
IMPORTHTML(A2; B2; C2)
  

Расшифруем: в первой строке, как и в предыдущем случае, содержится заключенный в кавычки URL (обязательно с указанием протокола), затем параметр «table», если хотите получить данные из таблицы, или «list», если из списка. Числовое значение (индекс) означает порядковый номер таблицы или списка в html-коде страницы.