Как сделать парсер сайта

Как сделать парсер сайта

Лучшие инструменты для самостоятельного парсинга веб-сайтов — исчерпывающий список

Меня зовут Максим Кульгин и моя компания xmldatafeed занимается парсингом сайтов в России порядка четырех лет. Ежедневно мы парсим более 500 крупнейших интернет-магазинов в России и на выходе мы отдаем данные в формате Excel/CSV и делаем готовую аналитику для маркетплейсов.

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

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

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

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

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

Scrapy — фреймворк для реализации обхода (сканирования) и парсинга веб-сайтов, написанный на Python для разработчиков, работающих с этим языком программирования. Scrapy считается полноценным фреймворком, поэтому в нем по умолчанию присутствует всё необходимое для парсинга веб-сайтов, включая модуль для отправки HTTP-запросов и извлечения данных из загруженной HTML-страницы.

Им можно пользоваться бесплатно, и у него открытый исходный код. Кроме того, при парсинге есть возможность сохранения данных. Однако Scrapy не выполняет JavaScript-код — необходимо обратиться за помощью к другой библиотеке. Вы можете воспользоваться Splash или Selenium — популярным инструментом для автоматизации браузера.

PySpider — еще один инструмент для парсинга веб-сайтов, который вы можете использовать для разработки сценариев (скриптов) на Python. В отличие от Scrapy данный инструмент может выполнять JavaScript-код, поэтому не требуется использовать Selenium. Однако PySpider по сравнению со Scrapy выглядит менее завершенным программным решением, поскольку Scrapy развивается с 2008 года, а также обладает более качественной документацией и более крупным сообществом пользователей. Но эти факты не делают PySpider каким-то ущербным. Напротив, PySpider включает в себя несколько уникальных возможностей, например веб-интерфейс с редактором сценариев.

Requests — HTTP-библиотека, облегчающая отправку HTTP-запросов. Она создана на основе библиотеки urllib. Это надежный инструмент, который позволяет вам создавать более надежные парсеры. Он удобен в использовании и сокращает объем кода.

Очень важно, что он позволяет управлять файлами cookie и сессиями, а также, помимо всего прочего, аутентификацией и автоматической организацией пула соединений. Библиотека requests бесплатна, и разработчики на Python могут использовать ее для скачивания веб-страниц, перед тем как применять парсер для выборки необходимых им данных.

BeautifulSoup упрощает процесс извлечения данных из веб-страниц. Эта библиотека использует анализатор кода HTML и XML, предоставляя вам характерные для Python способы осуществления доступа к данным. BeautifulSoup стал одним из наиболее важных инструментов для парсинга веб-сайтов на рынке благодаря легкости парсинга, которую он обеспечивает.

Фактически в большинстве обучающих материалов на тему парсинга веб-сайтов используется BeautifulSoup с целью показать новичкам как писать парсеры. При использовании этой библиотеки одновременно с библиотекой Requests для отправки HTTP-запросов разрабатывать парсеры становится гораздо проще, чем при использовании Scrapy или PySpider.

Scrapy, Requests и BeautifulSoup не помогут вам, если целевой веб-сайт использует подход AJAX, то есть если он зависит от асинхронных запросов, предназначенных для загрузки определенных фрагментов веб-страницы при помощи JavaScript. Если вы обращаетесь к такой веб-странице, вам нужно использовать Selenium — инструмент автоматизации браузера. Его можно применять для автоматизации браузеров с поддержкой headless-режима, например Chrome и Firefox. Более ранние версие могут автоматизировать PhantomJS.

Node.js тоже становится популярной платформой для создания парсеров благодаря популярности JavaScript. У Node.js есть множество инструментов для парсинга веб-сайтов, но не настолько много по сравнению с Python. Два самых популярных инструмента для среды выполнения Node.js рассмотрены ниже.

Cheerio для Node.js — это как BeautifulSoup для Python. Это библиотека анализа данных, которая предоставляет API для сканирования содержимого веб-страницы и управления им. У нее нет возможности выполнения JavaScript-кода, поэтому для этой цели вам нужен браузер в headless-режиме. Единственная задача Cheerio — предоставить вам доступ к jQuery, который используется в качестве API для извлечения данных из веб-страницы. Cheerio — гибкая, быстрая и довольно удобная библиотека.

Puppeteer — один из лучших инструментов для парсинга веб-сайтов, который могут использовать разработчики на JavaScript. Это инструмент автоматизации браузера, предоставляющий высокоуровневый API для управления браузером Chrome. Puppeteer был разработан компанией Google и предназначен для использования только с браузером Chrome и другими браузерами на основе Chromium. В отличие от кроссплатформенного Selenium, Puppeteer можно использовать только в среде Node.js.

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

  • Размер пула прокси-серверов: не разглашается.
  • Поддержка геотаргетинга: присутствует ограниченная поддержка.
  • Стоимость: $60 за 100 000 запросов.
  • Бесплатное пробное использование: 10 000 запросов за 14 дней.
  • Особые функции: извлечение необходимых данных из веб-сайтов.

AutoExtract API — один из лучших API для парсинга веб-сайтов, который вы можете найти на рынке. Он был разработан компанией Scrapinghub, создателем Crawlera — API для работы с прокси-серверами. Scrapinghub выполняет львиную долю работы по сопровождению Scrapy — популярного фреймворка для создания парсеров, ориентированного на Python-программистов.

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

  • Размер пула прокси-серверов: не разглашается.
  • Поддержка геотаргетинга: присутствует.
  • Стоимость: начинается с $29 за 250 000 единиц доступа («кредитов») к API.
  • Бесплатное пробное использование: 1 000 обращений к API.
  • Особые функции: управление браузером в headless-режиме для исполнения JavaScript-кода.

ScrapingBee — API для парсинга веб-сайтов, позволяющий скачивать веб-страницы. Благодаря ScrapingBee вы сможете думать не о блоках, а о самом извлечении данных из загруженной веб-страницы, которую ScrapingBee возвращает вам в качестве ответа.

ScrapingBee удобен в использовании и для этого требуется всего лишь делать запросы к API. ScrapingBee задействует большой пул IP-адресов, используемых для отправки ваших запросов, что защищает вас от блокировки на тех веб-сайтах, данные из которых вы собираете. Кроме того, ScrapingBee помогает вам управлять браузером Chrome в headless-режиме, что непросто, особенно при масштабировании кластера серверов (Selenium Grid), на которых функционируют браузеры Chrome в headless-режиме.

  • Размер пула прокси-серверов: более 40 миллионов.
  • Поддержка геотаргетинга: зависит от выбранного тарифного плана.
  • Стоимость: начинается с $29 за 250 000 обращений к API.
  • Бесплатное пробное использование: 1 000 обращений к API.
  • Особые функции: решение капч и работа с браузерами в headless-режиме.

Обрабатывая каждый месяц более пяти миллиардов запросов к API, Scraper API — сила, с которой нужно считаться на рынке прикладных интерфейсов для парсинга веб-сайтов. Это довольно функциональная система, которая позволяет вам управлять множеством задач, включая ротацию IP-адресов с использованием их собственного пула прокси-серверов, включающего в себя более 40 миллионов IP-адресов.

Помимо ротации IP-адресов Scraper API также управляет браузерами в headless-режиме и избавит вас от необходимости работы непосредственно с капчами. Это быстрый и надежный API для парсинга веб-сайтов. Среди его пользователей, которые перечислены на сайте разработчиков, можно найти множество компаний из списка Fortune 500. При этом цены находятся на приемлемом уровне.

  • Размер пула прокси-серверов: более 30 миллионов.
  • Поддержка геотаргетинга: присутствует ограниченная поддержка.
  • Стоимость: начинается с $8,99 за 50 000 запросов.
  • Бесплатное пробное использование: 1 000 запросов.
  • Особые функции: управление браузерами Chrome в headless-режиме.

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

Zenscrape скачает вам веб-страницу в том виде, в котором она отображается обычным пользователям, а также может работать с основанным на геотаргетинге контентом в зависимости от выбранного вами тарифного плана. Очень важно, что Zenscrape отлично справляется с выполнением кода на JavaScript, поскольку все запросы осуществляются с помощью Chrome в headless-режиме. Zenscrape даже поддерживает популярные JavaScript-фреймворки.

  • Размер пула прокси-серверов: не разглашается.
  • Поддержка геотаргетинга: присутствует.
  • Стоимость: начинается с $9 за 5 000 запросов.
  • Бесплатное пробное использование: присутствует.
  • Особые функции: решение капч и выполнение кода на JavaScript.

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

ScrapingAnt позволяет выполнять JavaScript-код, используя Chrome в headless-режиме, работает с прокси-серверами и помогает вам избегать капч. ScrapingAnt также управляет пользовательскими файлами cookie и первичной обработкой выходных данных. Цены можно назвать лояльными, поскольку вы можете начать пользоваться этим API для парсинга веб-сайтов всего за $9.

Раньше для парсинга веб-сайтов вам нужно было писать программный код. Теперь это уже не так, ведь появились инструменты парсинга, предназначенные специально для людей, не обладающих навыками программирования. Благодаря этим инструментам не нужно писать программные коды для парсинга необходимых данных из Всемирной паутины. Эти инструменты могут быть реализованы в виде устанавливаемого на компьютер программного обеспечения (ПО), облачного решения или расширения для браузера.

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

  • Стоимость: начинается с $75 в месяц.
  • Бесплатное пробное использование: 14 дней с ограничениями.
  • Формат вывода данных: CSV, Excel, JSON, MySQL и SQLServer.
  • Поддержка операционных систем: Windows.

Octoparse делает парсинг веб-сайтов простым для любого пользователя. Благодаря Octoparse вы можете быстро превратить весь веб-сайт в структурированную электронную таблицу всего за несколько кликов. Octoparse не требует наличия навыков программирования, так как всё, что от вас требуется для получения нужных данных, — всего лишь перемещать курсор мыши и щелкать ею. Octoparse может собирать данные с любых веб-сайтов, включая веб-сайты, на которых используется AJAX и применяются серьезные меры противодействия парсингу. Это ПО использует ротацию IP-адресов, чтобы «заметать следы» вашего IP-адреса. Помимо ПО для компьютеров, разработчики предлагают облачное решение и даже 14-дневный период бесплатного использования.

  • Стоимость: разовая оплата — от $99 с доступом к основным обновлениям в течение трех месяцев.
  • Бесплатное пробное использование: 10 дней без ограничений по функционалу.
  • Формат вывода данных: CSV и Excel.
  • Поддержка операционных систем: Windows.

Helium Scraper — другое ПО, которое можно использовать для парсинга веб-сайтов при отсутствии навыков программирования. Вы можете собирать сложные данные, определяя свои собственные действия, выполняемые при парсинге. Кроме того, если вы разработчик, то можете запускать на выполнение свои файлы с JavaScript-кодом. Благодаря несложной организации работы, Helium Scraper не только удобен в использовании, но и позволяет быстро выполнять нужные операции благодаря простому и логичному интерфейсу. Кроме того, Helium Scraper — ПО для парсинга, предоставляющее множество функций, включая планирование парсинга, ротацию прокси-серверов, управление текстом, вызовы API и прочее.

  • Стоимость: версия для настольных компьютеров бесплатна.
  • Формат вывода данных: JSON и Excel.
  • Поддержка операционных систем: Windows, Mac и Linux.

ParseHub предлагается в двух версиях: приложение для настольных компьютеров, которое можно использовать бесплатно, и платное облачное решение для парсинга, включающее в себя дополнительные возможности и не требующее установки. ParseHub в виде приложения для настольных компьютеров облегчает парсинг любого интересующего вас веб-сайта, даже если у вас нет навыков программирования. Всё потому, что данное ПО предоставляет интерфейс point-and-click, то есть в котором доступ к функциям осуществляется через наведение курсора мыши на соответствующие графические элементы и щелчки кнопкой мыши. Этот интерфейс предназначен для того, чтобы подготовить ParseHub к извлечению необходимых вам данных. ParseHub прекрасно работает с современными веб-сайтами и позволяет вам скачивать извлеченные данные в популярных файловых форматах.

  • Стоимость: начинается с $49,99 в месяц.
  • Бесплатное пробное использование: есть бесплатный тарифный план — Starter, но в нем присутствуют ограничения.
  • Форматы вывода данных: TXT, CSV, Excel, JSON, MySQL, Google Таблицы и так далее.
  • Поддержка операционных систем: Windows, Mac и Linux.

ScrapeStorm отличается от других приложений для настольных компьютеров, представленных выше, поскольку здесь интерфейс point-and-click используется только тогда, когда ScrapeStorm не может обнаружить требуемые данные. ScrapeStorm применяет искусственный интеллект для обнаружения определенных фрагментов данных на веб-страницах. ScrapeStorm быстр, надежен и удобен в использовании. Что касается поддержки операционных систем, то ScrapeStorm работает на Windows, Mac и Linux. Данное ПО поддерживает множественный экспорт данных и позволяет осуществлять парсинг в масштабе предприятия. Интересен тот факт, что ScrapeStorm создан бывшими разработчиками поисковых роботов Google.

  • Стоимость: разовая оплата — от $139 за однопользовательскую лицензию.
  • Бесплатное пробное использование: 14 дней с ограничениями.
  • Формат вывода данных: CSV, Excel, XML, JSON и MySQL.
  • Поддержка операционных систем: Windows.

WebHarvy — очередное ПО для парсинга веб-сайтов и извлечения данных с веб-страниц, которое вы можете установить на свой компьютер. Это ПО позволяет вам осуществлять парсинг посредством ввода одной единственной строки кода и выбирать место сохранения собранных данных: в файле или в системе управления базами данных. Оно представляет собой наглядный инструмент, который можно применять для парсинга любых данных из веб-страниц, например адресов электронной почты, ссылок, изображений и даже целых HTML-файлов. WebHarvy включает в себя средство для обнаружения структурированных данных и сканирует сразу несколько веб-страниц.

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

  • Стоимость: бесплатно.
  • Бесплатное пробное использование: версия для Chrome предоставляется абсолютно бесплатно.
  • Формат вывода данных: CSV.

Webscraper.io — расширение для браузеров Chrome и Firefox, представляющее собой один из лучших инструментов для парсинга веб-сайтов, который вы можете использовать, чтобы с легкостью извлекать данные с веб-страниц. Более 250 000 тысяч пользователей установили его и сочли чрезвычайно полезным. Подобные расширения для браузеров не требуют от вас навыков программирования, поскольку в них используется графический интерфейс (point-and-click). Интересно, что расширение «Web Scraper» можно применять для парсинга даже самых продвинутых и современных веб-сайтов, на которых есть много возможностей, реализованных с помощью JavaScript.

  • Стоимость: начинается с $19,99 в месяц.
  • Бесплатное пробное использование: 500 веб-страниц в месяц.
  • Формат вывода данных: CSV и Excel.

Расширение «Data Miner» доступно только для браузеров Google Chrome и Microsoft Edge. Оно позволяет собирать данные с веб-страниц и сохранять их в CSV или электронную таблицу Excel. В отличие от расширения от Webscraper.io, которое предлагается бесплатно, расширение «Data Miner» будет бесплатным только в случае, если вы будете парсить не более 500 веб-страниц за один месяц. В противном случае вам нужно будет оформить подписку на платный тарифный план. Благодаря этому расширению вы можете парсить любую веб-страницу, не задумываясь о блоках, а конфиденциальность ваших данных будет под защитой.

  • Стоимость: полностью бесплатное расширение.
  • Бесплатное пробное использование: присутствует.
  • Формат вывода данных: CSV, Excel и TXT.

Scraper — расширение для Chrome, которое, по всей видимости, разработано и поддерживается одним разработчиком — у Scraper даже нет своего веб-сайта, как у вышеупомянутых инструментов. Scraper не такой продвинутый по сравнению с рассмотренными выше расширениями, но он полностью бесплатный. Основная проблема со Scraper состоит в том, что пользователям необходимо знать XPath, поскольку в Scraper применяется именно этот язык запросов. В связи с этим Scraper нельзя назвать благосклонным к начинающим пользователям.

  • Стоимость: бесплатно.
  • Бесплатное пробное использование: версия для Chrome предоставляется абсолютно бесплатно.
  • Формат вывода данных: JSON.

SimpleScraper — другой парсер в виде расширения для браузера Chrome. Установив это расширение в свой Chrome, парсинг веб-сайтов станет удобным и бесплатным, поскольку вы сможете превратить любой веб-сайт в API. Расширение позволит очень быстро извлекать с веб-страниц структурированные данные. При этом оно работает на всех веб-сайтах, включая те из них, на которых используется много кода на языке JavaScript. Если вам нужен более гибкий вариант данного инструмента, то можете обратить внимание на облачное решение от тех же разработчиков, но оно платное.

  • Стоимость: бесплатно.
  • Бесплатное пробное использование: 14-дневный бесплатный пробный период с сотней «кредитов», которые можно потратить на парсинг веб-страниц.
  • Формат вывода данных: электронные таблицы Google, CSV и Excel.
  • Услуга ротации IP-адресов.

С помощью Agenty Scraping Agent вы можете начать собирать данные с веб-страниц, не думая о блоках. Это платный инструмент, но разработчики предлагают и бесплатную пробную версию. Agenty Scraping Agent разработан для современной Всемирной паутины и поэтому может без проблем собирать данные с веб-сайтов, активно использующих JavaScript. Интересно, что инструмент при этом довольно хорошо работает на старых веб-сайтах.

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

  • Размер пула прокси-серверов: более 72 миллионов.
  • Расположение прокси-серверов: все страны мира.
  • Возможность параллельной работы: без ограничений.
  • Допустимая пропускная способность: от 40 ГБ.
  • Стоимость: начинается с $500 в месяц за 40 ГБ.

Luminati, пожалуй, — лучший поставщик прокси-серверов на рынке. Он обладает крупнейшей в мире сетью прокси-серверов с более 72 миллионов резидентных IP-адресов в своем пуле прокси-серверов. Он остается одним из самых безопасных, надежных и быстрых решений. Интересно, что Luminati совместим с большинством популярных веб-сайтов, существующих сегодня во Всемирной паутине. У Luminati есть лучшая система управления сессиями, поскольку она позволяет вам определять сроки хранения сессий. Также Luminati обладает прокси-серверами со скоростной ротацией IP-адресов, которые меняют IP-адрес после каждого запроса. Однако у Luminati высокая стоимость.

  • Размер пула прокси-серверов: более 10 миллионов.
  • Расположение прокси-серверов: 195 географических пунктов по всему миру.
  • Возможность параллельной работы: без ограничений.
  • Допустимая пропускная способность: от 5 ГБ.
  • Стоимость: начинается с $75 в месяц за 5 ГБ.

Smartproxy обладает пулом резидентных прокси-серверов, в который входят более 10 миллионов IP-адресов. Прокси-серверы Smartproxy довольно неплохо показывают себя при парсинге веб-сайтов благодаря системе управления сессиями. У Smartproxy есть прокси-серверы, которые могут хранить сессию и один и тот же IP-адрес в течение десяти минут, что идеально для парсинга веб-сайтов, основанных на авторизации пользователей. Для обычных веб-сайтов вы можете использовать прокси-серверы со скоростной ротацией, которые меняют IP-адрес после каждого запроса. Прокси-серверы Smartproxy располагаются приблизительно в 195 странах и в восьми крупных городах по всему миру.

  • Размер пула IP-адресов: точное количество не разглашается, но, вероятно, десятки тысяч.
  • Расположение прокси-серверов: не отличается большим количеством пунктов размещения.
  • Допустимая пропускная способность: без ограничений.
  • Стоимость: начинается с $99 за 200 000 запросов.

Crawlera позволяет вам фокусироваться на самих данных, помогая присматривать за прокси-серверами. Crawlera выглядит ущербно по сравнению с Luminati, если говорить о количестве имеющихся в системе IP-адресов.

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

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

ScrapingHub заслужили авторитет в сфере парсинга веб-сайтов благодаря наличию как бесплатных, так и платных инструментов, предназначенных для разработчиков парсеров. Помимо этих инструментов, у ScrapingHub также есть сервис предоставления данных, в котором нужно всего лишь описать необходимые вам данные, и вам отправят стоимость их извлечения. Более 2 000 компаний воспользовались данным сервисом для обеспечения своей работы.

ScrapeHero — еще один сервис парсинга веб-сайтов, к которому можно обратиться, чтобы собрать нужные вам данные в том случае, если вы не хотите испытать на себе все сложности самостоятельного парсинга данных. ScrapeHero — гораздо более молодая компания по сравнению со Scrapinghub, но довольно востребованная среди предпринимателей. С помощью ScrapeHero вы можете получить данные о рынке недвижимости, данные из прессы, данные из социальных медиа и прочие данные. Чтобы узнать расценки сервиса, вам нужно связаться с разработчиками.

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

Если вы не хотите усложнять себе жизнь парсерами, прокси-серверами, серверами, инструментами для решения капч и прикладными интерфейсами для парсинга веб-сайтов, то PromptCloud — ваш выбор. Для использовании PromptCloud вам нужно всего лишь отправить свои требования к данным и ожидать их довольно оперативной доставки в нужном вам формате. Благодаря PromptCloud вы получаете очищенные данные с веб-страниц без каких-либо технических трудностей. Это полностью управляемый пользователем сервис с прекрасной службой поддержки.

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

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

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

Парсинг любого сайта «для чайников»: ни строчки программного кода

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

Евгений Костин рассказал о том, как спарсить любой сайт, даже если вы совсем не дружите с программированием. Разбор сделан на примере Screaming Frog Seo Spider.

Что такое парсинг и зачем он нужен

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

Одно из применений парсинга — наполнение каталога новыми товарами на основе уже существующих сайтов в интернете.

Упрощенно, парсинг — это сбор информации. Есть более сложные определения, но так как мы говорим о парсинге «для чайников», то нет никакого смысла усложнять терминологию. Парсинг — это сбор, как правило, структурированной информации. Чаще всего — в виде таблицы с конкретным набором данных. Например, данных по характеристикам товаров.

Парсер — программа, которая осуществляет этот сбор. Она ходит по ссылкам на страницы, которые вы указали, и собирает нужную информацию в Excel-файл либо куда-то еще.

Парсинг работает на основе XPath-запросов. XPath — язык запросов, который обращается к определенному участку кода страницы и собирает из него заданную информацию.

ПО для парсинга

Здесь есть важный момент. Если вы введете в поисковике слово «парсинг» или «заказать парсинг», то, как правило, вам будут предлагаться услуги от компаний, которые создадут парсер под ваши задачи. Стоят такие услуги относительно дорого. В результате программисты под заказ напишут некую программу либо на Python, либо на каком-то еще языке, которая будет собирать информацию с нужного вам сайта. Эта программа нацелена только на сбор конкретных данных, она не гибкая и без знаний программирования вы не сможете ее самостоятельно перенастроить для других задач.

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

Вот две программы, которые являются аналогами.

    (есть только годовая лицензия). (есть триал на 14 дней, лицензии на месяц и более).

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

Профессиональные инструменты PromoPult: быстрее, чем руками, дешевле, чем у других, бесплатные опции.

Съем позиций, кластеризация запросов, парсер Wordstat, сбор поисковых подсказок, сбор фраз ассоциаций, парсер мета-тегов и заголовков, анализ индексации страниц, чек-лист оптимизации видео, генератор из YML, парсер ИКС Яндекса, нормализатор и комбинатор фраз, парсер сообществ и пользователей ВКонтакте.

Давайте смотреть на реальных примерах.

Пример 1. Как спарсить цену

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

Возьмем для примера сайт mosdommebel.ru.

У нас есть страница карточки товара, есть название и есть цена этого товара. Как нам собрать эту цену и цены всех остальных товаров?

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

Нажимаем правой кнопкой мыши прямо на цену (не просто на какой-то фон или пустой участок). Затем выбираем пункт Inspect Element для того, чтобы в коде сразу его определить (Исследовать элемент или Просмотреть код элемента, в зависимости от браузера — прим. ред.).

Мы видим, что цена у нас помещается в тег с классом totalPrice2. Так разработчик обозначил в коде стоимость данного товара, которая отображается в карточке.

Фиксируем: есть некий элемент span с классом totalPrice2. Пока это держим в голове.

Есть два варианта работы с парсерами.

Первый способ. Вы можете прямо в коде (любой браузер) нажать правой кнопкой мыши на тег <span> и выбрать Скопировать > XPath. У вас таким образом скопируется строка, которая обращается к данному участку кода.

Выглядит она так:

Но этот вариант не очень надежен: если у вас в другой карточке товара верстка выглядит немного иначе (например, нет каких-то блоков или блоки расположены по-другому), то такой метод обращения может ни к чему не привести. И нужная информация не соберется.

Поэтому мы будем использовать второй способ. Есть специальные справки по языку XPath. Их очень много, можно просто загуглить «XPath примеры».

Здесь указано как что-то получить. Например, если мы хотим получить содержимое заголовка h1, нам нужно написать вот так:

Если мы хотим получить текст заголовка с классом productName, мы должны написать вот так:

То есть поставить «//» как обращение к некому элементу на странице, написать тег h1 и указать в квадратных скобках через символ @ «класс равен такому-то».

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

Куда вписывать XPath-запрос

Мы идем в один из парсеров. В данном случае — Screaming Frog Seo Spider.

Эта программа бесплатна для анализа небольшого сайта — до 500 страниц.

Интерфейс Screaming Frog Seo Spider

Например, мы можем — бесплатно — посмотреть заголовки страниц, проверить нет ли у нас каких-нибудь пустых тайтлов или дубликатов тега h1, незаполненных метатегов или каких-нибудь битых ссылок.

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

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

Во вкладке меню Configuration у нас есть подпункт Custom, и в нем есть еще один подпункт Extraction. Здесь мы можем дополнительно что-то поискать на тех страницах, которые мы укажем.

Заходим в Extraction. Нам нужно с сайта Московского дома мебели собрать цены товаров.

Мы выяснили в коде, что у нас все цены на карточках товара обозначаются тегом <span> с классом totalPrice2. Формируем вот такой XPath запрос:

И указываем его в разделе Configuration > Custom > Extractions. Для удобства можем назвать как-нибудь колонку, которая у нас будет выгружаться. Например, «стоимость»:

Таким образом мы будем обращаться к коду страниц и из этого кода вытаскивать содержимое стоимости.

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

Нажимаем ОК. Мы задали кастомные параметры парсинга.

Как подобрать страницы для парсинга

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

Если мы просто укажем адрес сайта в Screaming Frog, парсер пойдет по всем страницам сайта. На инфостраницах и страницах категорий у нас нет цен, а нам нужны именно цены, которые указаны на карточках товара. Чтобы не тратить время, лучше загрузить в парсер конкретный список страниц, по которым мы будем ходить, — карточки товаров.

Откуда их взять? Как правило, на любом сайте есть карта сайта XML, и находится она чаще всего по адресу: «адрес сайта/sitemap.xml». В случае с сайтом из нашего примера — это адрес:

Либо вы можете зайти в robots.txt (site.ru/robots.txt) и посмотреть. Чаще всего в этом файле внизу содержится ссылка на карту сайта.

Ссылка на карту сайта в файле robots.txt

Даже если карта называется как-то странно, необычно, нестандартно, вы все равно увидите здесь ссылку.

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

У нас карта сайта есть, поэтому мы переходим по ссылке https://www.mosdommebel.ru/sitemap.xml и видим, что сама карта разделяется на несколько карт. Отдельная карта по статичным страницам, по категориям, по продуктам (карточкам товаров), по статьям и новостям.

Ссылки на отдельные sitemap-файлы под все типы страниц

Нас интересует карта продуктов, то есть карточек товаров.

Ссылка на sitemap-файл для карточек товара

Возвращаемся в Screaming Frog Seo Spider. Сейчас он запущен в стандартном режиме, в режиме Spider (паук), который ходит по всему сайту и анализирует все страницы. Нам нужно его запустить в режиме List.

Мы загрузим ему конкретный список страниц, по которому он будет ходить. Нажимаем на вкладку Mode и выбираем List.

Жмем кнопку Upload и кликаем по Download Sitemap.

Указываем ссылку на Sitemap карточек товара, нажимаем ОК.

Программа скачает все ссылки, указанные в карте сайта. В нашем случае Screaming Frog обнаружил более 40 тысяч ссылок на карточки товаров:

Нажимаем ОК, и у нас начинается парсинг сайта.

После завершения парсинга на первой вкладке Internal мы можем посмотреть информацию по всем характеристикам: код ответа, индексируется/не индексируется, title страницы, description и все остальное.

Это все полезная информация, но мы шли за другим.

Вернемся к исходной задаче — посмотреть стоимость товаров. Для этого в интерфейсе Screaming Frog нам нужно перейти на вкладку Custom. Чтобы попасть на нее, нужно нажать на стрелочку, которая находится справа от всех вкладок. Из выпадающего списка выбрать пункт Custom.

И на этой вкладке из выпадающего списка фильтров (Filter) выберите Extraction.

Вы как раз и получите ту самую информацию, которую хотели собрать: список страниц и колонка «Стоимость 1» с ценами в рублях.

Задача выполнена, теперь все это можно выгрузить в xlsx или csv-файл.

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

Таким образом, вы получили информацию по стоимости товаров у сайта-конкурента.

Если бы мы хотели получить что-нибудь еще, например, дополнительно еще собрать названия этих товаров, то нам нужно было бы зайти снова в Configuration > Custom > Extraction. И выбрать после этого еще один XPath-запрос и указать, например, что мы хотим собрать тег <h1>.

Просто запустив еще раз парсинг, мы собираем уже не только стоимость, но и названия товаров.

В результате получаем такую связку: url товара, его стоимость и название этого товара.

Если мы хотим получить описание или что-то еще — продолжаем в том же духе.

Важный момент: h1 собрать легко. Это стандартный элемент html-кода и для его парсинга можно использовать стандартный XPath-запрос (посмотрите в справке). В случае же с описанием или другими элементами нам нужно всегда возвращаться в код страницы и смотреть: как называется сам тег, какой у него класс/id либо какие-то другие атрибуты, к которым мы можем обратиться с помощью XPath-запроса.

Например, мы хотим собрать описание. Нужно снова идти в Inspect Element.

Оказывается, все описание товара лежит в теге <table> с классом product_description. Если мы его соберем, то у нас в таблицу выгрузится полное описание.

Здесь есть нюанс. Текст описания на странице сайта сделан с разметкой. Например, здесь есть переносы на новую строчку, что-то выделяется жирным.

Если вам нужно спарсить текст описания с уже готовой разметкой, то в настройках Extraction в парсере мы можем выбрать парсинг с html-кодом.

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

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

Такой парсинг можно запускать регулярно (например, раз в неделю) для отслеживания цен конкурентов. И сравнивать, у кого что стоит дороже/дешевле.

Пример 2. Как спарсить фотографии

Рассмотрим вариант решения другой прикладной задачи — парсинга фотографий.

На сайте Эльдорадо у каждого товара есть довольно-таки немало фотографий. Предположим, вы их хотите взять — это универсальные фото от производителя, которые можно использовать для демонстрации на своем сайте.

Задача: собрать в Excel адреса всех картинок, которые есть у разных карточек товара. Не в виде файлов, а в виде ссылок. Потом по ссылкам вы сможете их скачать либо напрямую загрузить на свой сайт. Большинство движков интернет-магазинов, таких как Битрикс и Shop-Script, поддерживают загрузку фотографий по ссылке. Если вы в CSV-файле, который используете для импорта-экспорта, укажете ссылки на фотографии, то по ним движок сможет загрузить эти фотографии.

Ищем свойства картинок

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

Нажимаем правой клавишей на фотографию, выбираем Inspect Element, начинаем исследовать.

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

Изображения лежат в элементе <span>, у которого id — firstFotoForma. Чтобы спарсить нужные нам картинки, понадобится вот такой XPath-запрос:

У нас здесь обращение к элементам с идентификатором firstFotoForma, дальше есть какие-то вложенные элементы (поэтому прописана звездочка), дальше тег img, из которого нужно получить содержимое атрибута src. То есть строку, в которой и прописан URL-адрес фотографии. Попробуем это сделать.

Берем XPath-запрос, в Screaming Frog переходим в Configuration > Custom > Extraction, вставляем и жмем ОК.

Для начала попробуем спарсить одну карточку. Нужно скопировать ее адрес и добавить в Screaming Frog таким образом: Upload > Paste

Нажимаем ОК. У нас начинается парсинг.

Screaming Frog спарсил одну карточку товара и у нас получилась такая табличка. Рассмотрим ее подробнее.

Мы загрузили один URL на входе, и у нас автоматически появилось сразу много столбцов «фото товара». Мы видим, что по этому товару собралось 9 фотографий.

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

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

Теперь пройдемся по всему сайту в режиме Spider (для переключения в этот режим нужно нажать Mode > Spider). Укажем адрес https://www.eldorado.ru, нажимаем старт и запускаем парсинг.

Так как программа парсит весь сайт, то по страницам, которые не являются карточками товара, ничего не находится.

А с карточек товаров собираются ссылки на все фотографии.

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

Если бы мы собирали артикулы, то еще раз зашли бы в Configuration > Custom > Extraction и добавили бы еще два XPath-запроса: для парсинга артикулов, а также тегов h1, чтобы собрать еще названия. Так мы бы убили сразу двух зайцев и собрали бы связку: название товара + артикул + фото.

Пример 3. Как спарсить характеристики товаров

Следующий пример — ситуация, когда нам нужно насытить карточки товаров характеристиками. Представьте, что вы продаете книжки. Для каждой книги у вас указано мало характеристик — всего лишь год выпуска и автор. А у Озона (сильный конкурент, сильный сайт) — характеристик много.

Вы хотите собрать в Excel все эти данные с Озона и использовать их для своего сайта. Это техническая информация, вопросов с авторским правом нет.

Изучаем характеристики

Нажимаете правой кнопкой по характеристике, выбираете Inspect Element и смотрите, как называется элемент, который содержит каждую характеристику.

У нас это элемент <div>, у которого в качестве класса указана строка eItemProperties_Line.

И дальше внутри каждого такого элемента <div> содержится название характеристики и ее значение.

Значит нам нужно собирать элементы <div> с классом eItemProperties_Line.

Для парсинга нам понадобится вот такой XPath-запрос:

Идем в Screaming Frog, Configuration > Custom > Extraction. Вставляем XPath-запрос, выбираем Extract Text (так как нам нужен только текст в чистом виде, без разметки), нажимаем ОК.

Переключаемся в режим Mode > List. Нажимаем Upload, указываем адрес страницы, с которой будем собирать характеристики, нажимаем ОК.

После завершения парсинга переключаемся на вкладку Custom, в списке фильтров выбираем Extraction.

И видим — парсер собрал нам все характеристики. В каждой ячейке находится название характеристики (например, «Автор») и ее значение («Игорь Ашманов»).

Пример 4. Как парсить отзывы (с рендерингом)

Следующий пример немного нестандартен — на грани «серого» SEO. Это парсинг отзывов с того же Озона. Допустим, мы хотим собрать и перенести на свой сайт тексты отзывов ко всем книгам.

Покажем процесс на примере одного URL. Начнем с того, что посмотрим, где отзывы лежат в коде.

Они находятся в элементе <div> с классом jsCommentContent:

Следовательно, нам нужен такой XPath-запрос:

Добавляем его в Screaming Frog. Теперь копируем адрес страницы, которую будем анализировать, и загружаем в парсер.

Жмем ОК и видим, что никакие отзывы у нас не загрузились:

Почему так? Разработчики Озона сделали так, что текст отзывов грузится в момент, когда вы докручиваете до места, где отзывы появляются (чтобы не перегружать страницу). То есть они изначально в коде нигде не видны.

Чтобы с этим справиться, нам нужно зайти в Configuration > Spider, переключиться на вкладку Rendering и выбрать JavaScript. Так при обходе страниц парсером будет срабатывать JavaScript и страница будет отрисовываться полностью — так, как пользователь увидел бы ее в браузере. Screaming Frog также будет делать скриншот отрисованной страницы.

Мы выбираем устройство, с которого мы якобы заходим на сайт (десктоп). Настраиваем время задержки перед тем, как будет делаться скриншот, — одну секунду.

Нажимаем ОК. Введем вручную адрес страницы, включая #comments (якорная ссылка на раздел страницы, где отображаются отзывы).

Для этого жмем Upload > Enter Manually и вводим адрес:

Обратите внимание! При рендеринге (особенно, если страниц много) парсер может работать очень долго.

Итак, парсер собрал 20 отзывов. Внизу они показываются в качестве отрисованной страницы. А вверху в табличном варианте мы видим текст этих отзывов.

Пример 5. Как спарсить скрытые телефоны на сайте ЦИАН

Следующий пример — сбор телефонов с сайта cian.ru. Здесь есть предложения о продаже квартир. Допустим, стоит задача собрать телефоны с каких-то предложений или вообще со всех.

У этой задачи есть особенности. На странице объявления телефон скрыт кнопкой «Показать телефон».

После клика он виден. А до этого в коде видна только сама кнопка.

Но на сайте есть недоработка, которой мы воспользуемся. После нажатия на кнопку «Показать телефон» мы видим, что она начинается «+7 967…». Теперь обновим страницу, как будто мы не нажимали кнопку, посмотрим исходный код страницы и поищем в нем «967».

И вот, мы видим, что этот телефон уже есть в коде. Он находится у ссылки, с классом a10a3f92e9—phone—3XYRR. Чтобы собрать все телефоны, нам нужно спарсить содержимое всех элементов с таким классом.

Используем этот класс в XPath-запросе:

Идем в Screaming Frog, Custom > Extraction. Указываем XPath-запрос и даем название колонке, в которую будут собираться телефоны:

Берем список ссылок (для примера я отобрал несколько ссылок на страницы объявлений) и добавляем их в парсер.

В итоге мы видим связку: адрес страницы — номер телефона.

Также мы можем собрать в дополнение к телефонам еще что-то. Например, этаж.

Алгоритм такой же:

  1. Кликаем по этажу, Inspect Element.
  2. Смотрим, где в коде расположена информация об этажах и как обозначается.
  3. Используем класс или идентификатор этого элемента в XPath-запросе.
  4. Добавляем запрос и список страниц, запускаем парсер и собираем информацию.

Пример 6. Как парсить структуру сайта на примере DNS-Shop

И последний пример — сбор структуры сайта. С помощью парсинга можно собрать структуру какого-то большого каталога или интернет-магазина.

Рассмотрим, как собрать структуру dns-shop.ru. Для этого нам нужно понять, как строятся хлебные крошки.

Нажимаем на любую ссылку в хлебных крошках, выбираем Inspect Element.

Эта ссылка в коде находится в элементе <span>, у которого атрибут itemprop (атрибут микроразметки) использует значение «name».

Используем элемент span со значением микроразметки в XPath-запросе:

Указываем XPath-запрос в парсере:

Пробуем спарсить одну страницу и получаем результат:

Таким образом мы можем пройтись по всем страницам сайта и собрать полную структуру.

Возможности парсинга на основе XPath

Что можно спарсить:

1. Любую информацию с почти любого сайта.

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

2. Цены, наличие товаров, любые характеристики, фото, 3D-фото.

3. Описание, отзывы, структуру сайта.

4. Контакты, неочевидные свойства и т.д.

Любой элемент на странице, который есть в коде, вы можете вытянуть в Excel.

Ограничения при парсинге

  • Бан по user-agent. При обращении к сайту парсер отсылает запрос user-agent, в котором сообщает сайту информацию о себе. Некоторые сайты сразу блокируют доступ парсеров, которые в user-agent представляются как приложения. Это ограничение можно легко обойти. В Screaming Frog нужно зайти в Configuration > User-Agent и выбрать YandexBot или Googlebot.

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

  • Запрет в robots.txt. Например, в robots.txt может быть прописан запрет индексирования каких-то разделов для Google-бота. Если мы user-agent настроили как Googlebot, то спарсить информацию с этого раздела не сможем.

Чтобы обойти ограничение, заходим в Screaming Frog в Configuration > Robots.txt > Settings

И выбираем игнорировать robots.txt

  • Бан по IP. Если вы долгое время парсите какой-то сайт, то вас могут заблокировать на определенное или неопределенное время. Здесь два варианта решения: использовать VPN или в настройках парсера снизить скорость, чтобы не делать лишнюю нагрузку на сайт и уменьшить вероятность бана.
  • Анализатор активности / капча. Некоторые сайты защищаются от парсинга с помощью умного анализатора активности. Если ваши действия похожи на роботизированные (когда обращаетесь к странице, у вас нет курсора, который двигается, или браузер не похож на стандартный), то анализатор показывает капчу, которую парсер не может обойти. Такое ограничение можно обойти, но это долго и дорого.

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

Как спарсить любой сайт?

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

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

Чтобы спарсить данные с вебсайта, пробуйте подходы именно в таком порядке:

Найдите официальное API,

Найдите XHR запросы в консоли разработчика вашего браузера,

Найдите сырые JSON в html странице,

Отрендерите код страницы через автоматизацию браузера,

Если ничего не подошло — пишите парсеры HTML кода.

Совет профессионалов: не начинайте с BS4/Scrapy

BeautifulSoup4 и Scrapy — популярные инструменты парсинга HTML страниц (и не только!) для Python.

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

Приходим к выводу, что не надо извлекать данные из HTML тегов раньше времени: разметка страницы может сильно поменяться, а CSS-селекторы и XPath могут не помочь. Используйте другие методы, о которых ниже. ⬇️

Используйте официальный API

�� Ого? Это не очевидно ��? Конечно, очевидно! Но сколько раз было: сидите пилите парсер сайта, а потом БАЦ — нашли поддержку древней RSS-ленты, обширный sitemap.xml или другие интерфейсы для разработчиков. Становится обидно, что поленились и потратили время не туда. Даже если API платный, иногда дешевле договориться с владельцами сайта, чем тратить время на разработку и поддержку.

Sitemap.xml — список страниц сайта, которые точно нужно проиндексировать гуглу. Полезно, если нужно найти все объекты на сайте. Пример: http://techcrunch.com/sitemap.xml

RSS-лента — API, который выдает вам последние посты или новости с сайта. Было раньше популярно, сейчас все реже, но где-то еще есть! Пример: https://habr.com/ru/rss/hubs/all/

Поищите XHR запросы в консоли разработчика

Кабина моего самолета

Кабина моего самолета

Все современные вебсайты (но не в дарк вебе, лол) используют Javascript, чтобы догружать данные с бекенда. Это позволяет сайтам открываться плавно и скачивать контент постепенно после получения структуры страницы (HTML, скелетон страницы).

Обычно, эти данные запрашиваются джаваскриптом через простые GET/POST запросы. А значит, можно подсмотреть эти запросы, их параметры и заголовки — а потом повторить их у себя в коде! Это делается через консоль разработчика вашего браузера (developer tools).

В итоге, даже не имея официального API, можно воспользоваться красивым и удобным закрытым API. ☺️

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

Алгорим действий такой:

Открывайте вебстраницу, которую хотите спарсить

Правой кнопкой -> Inspect (или открыть dev tools как на скрине выше)

Открывайте вкладку Network и кликайте на фильтр XHR запросов

Обновляйте страницу, чтобы в логах стали появляться запросы

Найдите запрос, который запрашивает данные, которые вам нужны

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

Вы заметите, что иногда эти XHR запросы включают в себя огромные строки — токены, куки, сессии, которые генерируются фронтендом или бекендом. Не тратьте время на ревёрс фронта, чтобы научить свой парсер генерировать их тоже.

Вместо этого попробуйте просто скопипастить и захардкодить их в своем парсере: очень часто эти строчки валидны 7-30 дней, что может быть окей для ваших задач, а иногда и вообще несколько лет. Или поищите другие XHR запросы, в ответе которых бекенд присылает эти строчки на фронт (обычно это происходит в момент логина на сайт). Если не получилось и без куки/сессий никак, — советую переходить на автоматизацию браузера (Selenium, Puppeteer, Splash — Headless browsers) — об этом ниже.

Поищите JSON в HTML коде страницы

Как было удобно с XHR запросами, да? Ощущение, что ты используешь официальное API. �� Приходит много данных, ты все сохраняешь в базу. Ты счастлив. Ты бог парсинга.

Но тут надо парсить другой сайт, а там нет нужных GET/POST запросов! Ну вот нет и все. И ты думаешь: неужели расчехлять XPath/CSS-selectors? ��‍♀️ Нет! ��‍♂️

Чтобы страница хорошо проиндексировалась поисковиками, необходимо, чтобы в HTML коде уже содержалась вся полезная информация: поисковики не рендерят Javascript, довольствуясь только HTML. А значит, где-то в коде должны быть все данные.

Современные SSR-движки (server-side-rendering) оставляют внизу страницы JSON со всеми данные, добавленный бекендом при генерации страницы. Стоп, это же и есть ответ API, который нам нужен! ������

Вот несколько примеров, где такой клад может быть зарыт (не баньте, плиз):

Красивый JSON на главной странице Habr.com. Почти официальный API! Надеюсь, меня не забанят. И наш любимый (у парсеров) Linkedin!

Алгоритм действий такой:

В dev tools берете самый первый запрос, где браузер запрашивает HTML страницу (не код текущий уже отрендеренной страницы, а именно ответ GET запроса).

Внизу ищите длинную длинную строчку с данными.

Если нашли — повторяете у себя в парсере этот GET запрос страницы (без рендеринга headless браузерами). Просто requests.get .

Вырезаете JSON из HTML любыми костылямии (я использую html.find(«=<") ).

Отрендерите JS через Headless Browsers

Если XHR запросы требуют актуальных tokens, sessions, cookies. Если вы нарываетесь на защиту Cloudflare. Если вам обязательно нужно логиниться на сайте. Если вы просто решили рендерить все, что движется загружается, чтобы минимизировать вероятность бана. Во всех случаях — добро пожаловать в мир автоматизации браузеров!

Если коротко, то есть инструменты, которые позволяют управлять браузером: открывать страницы, вводить текст, скроллить, кликать. Конечно же, это все было сделано для того, чтобы автоматизировать тесты веб интерфейса. I’m something of a web QA myself.

После того, как вы открыли страницу, чуть подождали (пока JS сделает все свои 100500 запросов), можно смотреть на HTML страницу опять и поискать там тот заветный JSON со всеми данными.

Selenoid — open-source remote Selenium cluster

Для масштабируемости и простоты, я советую использовать удалённые браузерные кластеры (remote Selenium grid).

Недавно я нашел офигенный опенсорсный микросервис Selenoid, который по факту позволяет вам запускать браузеры не у себя на компе, а на удаленном сервере, подключаясь к нему по API. Несмотря на то, что Support team у них состоит из токсичных разработчиков, их микросервис довольно просто развернуть (советую это делать под VPN, так как по умолчанию никакой authentication в сервис не встроено). Я запускаю их сервис через DigitalOcean 1-Click apps: 1 клик — и у вас уже создался сервер, на котором настроен и запущен кластер Headless браузеров, готовых запускать джаваскрипт!

Вот так я подключаюсь к Selenoid из своего кода: по факту нужно просто указать адрес запущенного Selenoid, но я еще зачем-то передаю кучу параметров бразеру, вдруг вы тоже захотите. На выходе этой функции у меня обычный Selenium driver, который я использую также, как если бы я запускал браузер локально (через файлик chromedriver).

Заметьте фложок enableVNC . Верно, вы сможете смотреть видосик с тем, что происходит на удалённом браузере. Всегда приятно наблюдать, как ваш скрипт самостоятельно логинится в Linkedin: он такой молодой, но уже хочет познакомиться с крутыми разработчиками.

Парсите HTML теги

Если случилось чудо и у сайта нет ни официального API, ни вкусных XHR запросов, ни жирного JSON внизу HTML, если рендеринг браузерами вам тоже не помог, то остается последний, самый нудный и неблагодарный метод. Да, это взять и начать парсить HTML разметку страницы. То есть, например, из <a href=»https://okhlopkov.com»>Cool website</a> достать ссылку. Это можно делать как простыми регулярными выражениями, так и через более умные инструменты (в питоне это BeautifulSoup4 и Scrapy) и фильтры (XPath, CSS-selectors).

Мой единственный совет: постараться минимизировать число фильтров и условий, чтобы меньше переобучаться на текущей структуре HTML страницы, которая может измениться в следующем A/B тесте.

Даниил Охлопков — Data Lead @ Runa Capital

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

Надеюсь, что-то из этого было полезно! Я считаю, что в парсинге важно, с чего ты начинаешь. С чего начать — я рассказал, а дальше ваш ход ��

Ссылка на основную публикацию