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

Каталог библиотек для парсинга под Python, JavaScript, PHP, Java, C# и Go: что выбрать под статические страницы, динамику и API.

КP
Команда Parsing.agency
Сбор данных под задачи бизнеса
Опубликовано: 31 января 2025

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

Четыре роли библиотек

Прежде чем перечислять конкретные пакеты, важно понять, что почти любой парсер собирается из инструментов четырёх типов. Часто одну библиотеку используют не саму по себе, а в связке: например, HTTP-клиент качает HTML, а парсер его разбирает.

  • HTTP-клиенты. Отправляют запросы и получают ответ (HTML, JSON). Быстрые и лёгкие, но не исполняют JavaScript — видят только то, что отдал сервер. Подходят для статичных страниц и для прямого обращения к API сайта.
  • Парсеры HTML/XML. Превращают строку HTML в дерево, по которому можно искать данные через CSS-селекторы или XPath. Сами по себе ничего не качают — им на вход подают готовый HTML.
  • Браузерная автоматизация (headless). Запускают настоящий браузер (чаще Chromium), исполняют JavaScript, умеют кликать, скроллить, заполнять формы, ждать появления элементов. Незаменимы для SPA и динамики, но тяжёлые по ресурсам.
  • Комплексные фреймворки. Берут на себя весь конвейер: очередь запросов, конкурентность, повторы, обработку и сохранение данных (пайплайны). Подходят для масштабных и регулярных задач, где важна не одна страница, а тысячи.

Дальше — библиотеки по языкам, сгруппированные внутри по этим ролям.


Python

HTTP-клиенты: requests — классика, синхронный и простой; httpx — современная замена с поддержкой async и HTTP/2; aiohttp — асинхронный клиент для высокой нагрузки; curl_cffi — подменяет TLS-отпечаток под реальный Chrome, помогает проходить базовую антибот-защиту без браузера.

Парсеры: BeautifulSoup — самый дружелюбный для новичка; lxml — быстрый, на C, с поддержкой XPath; parsel — селекторный движок из экосистемы Scrapy; selectolax — самый быстрый на больших объёмах; pyquery — синтаксис в стиле jQuery.

Браузерная автоматизация: Playwright — современный выбор по умолчанию (async, авто-ожидания); Selenium — ветеран, огромное сообщество; SeleniumBase — надстройка над Selenium с режимом маскировки; nodriver — стелс-инструмент от автора undetected-chromedriver (последний во многом устарел и хуже проходит современные защиты).

Фреймворки: Scrapy — зрелый стандарт для масштабных краулов с пайплайнами; Crawlee for Python — гибрид, переключается между HTTP и браузером; MechanicalSoup — лёгкая работа с формами и сессиями; Scrapling — новый адаптивный парсер, устойчивый к изменениям вёрстки.


JavaScript / Node.js

HTTP-клиенты: нативный fetch; axios — самый популярный клиент с удобным API; got — лёгкий и быстрый; undici — высокопроизводительный клиент от команды Node.js.

Парсеры: cheerio — быстрый разбор статичного HTML в стиле jQuery; jsdom — полноценная эмуляция DOM (тяжелее cheerio); parse5 и htmlparser2 — низкоуровневые парсеры, на которых строятся другие инструменты.

Браузерная автоматизация: Puppeteer — управление Chrome/Chromium; Playwright — то же с поддержкой нескольких браузеров и чистым API; puppeteer-extra — плагины, в том числе stealth для маскировки.

Фреймворки: Crawlee — мощный фреймворк от Apify с очередями, прокси и автопереключением HTTP/браузер; node-crawler — классический краулер с пулом запросов.


PHP

HTTP-клиенты: Guzzle — стандарт де-факто, PSR-совместимый; Symfony HttpClient — современный клиент из экосистемы Symfony; нативный cURL.

Парсеры: Symfony DomCrawler — разбор по CSS-селекторам и XPath; DiDOM — быстрый и простой; Simple HTML DOM — самый низкий порог входа, переваривает «битый» HTML.

Навигация и браузер: Symfony BrowserKit (класс HttpBrowser) — эмуляция браузера на чистом PHP, ходит по ссылкам и отправляет формы, но не исполняет JS (сюда же мигрировал устаревший Goutte); Symfony Panther и php-webdriver — управление реальным Chrome/Firefox для динамики; chrome-php — управление Chrome напрямую.

Фреймворки: Roach PHP — полноценный аналог Scrapy для PHP с пайплайнами и middleware; crwlr — фреймворк из готовых «шагов»-блоков для краулеров.


Go (Golang)

HTTP-клиенты: net/http — мощная стандартная библиотека; resty — удобная обёртка с лаконичным API.

Парсеры: goquery — разбор в стиле jQuery (CSS-селекторы); htmlquery — выборка по XPath.

Браузерная автоматизация: chromedp — отраслевой стандарт, управление Chrome по DevTools Protocol; Rod — современная альтернатива с удобным API; playwright-go — порт Playwright.

Фреймворки: Colly — быстрый concurrent-фреймворк для статики; Geziyor — фреймворк с поддержкой JS-рендеринга; Ferret — извлечение данных через собственный декларативный язык запросов.


C / C++

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

HTTP-клиенты: libcurl — фундаментальная библиотека, на которой держатся клиенты в большинстве языков; CPR — современная C++-обёртка над libcurl в стиле Python requests.

Парсеры: libxml2 — зрелый парсер HTML/XML; Gumbo — HTML5-парсер от Google; lexbor — быстрый современный HTML/CSS-движок; pugixml — лёгкий XML-парсер для sitemap и RSS.

Исполнения JavaScript из коробки нет — при необходимости интегрируют встроенный браузерный движок или внешний headless.


C# / .NET

HTTP-клиенты: HttpClient — штатный клиент .NET; RestSharp — удобная обёртка для REST-запросов.

Парсеры: HtmlAgilityPack — самый популярный, терпит «битый» HTML, поддерживает XPath; AngleSharp — W3C-совместимый, с querySelector как в браузере; Fizzler — движок CSS-селекторов поверх HtmlAgilityPack.

Браузерная автоматизация: PuppeteerSharp — порт Puppeteer; Playwright for .NET — официальный порт Playwright; Selenium WebDriver.

Фреймворки: DotnetSpider — фреймворк в духе Scrapy; Abot — настраиваемый краулер.


Java

HTTP-клиенты: Apache HttpClient — зрелый стандарт; OkHttp — современный быстрый клиент.

Парсеры: Jsoup — главный инструмент для разбора HTML в Java, удобные CSS-селекторы.

Браузерная автоматизация: HtmlUnit — headless-браузер на самой Java с частичной поддержкой JS; Selenium и Playwright for Java — управление реальным браузером.

Фреймворки: WebMagic — фреймворк в стиле Scrapy; Crawler4j — простой и быстрый краулер.


Ruby

HTTP-клиенты: Faraday — гибкий клиент с middleware; HTTParty — лаконичный и простой.

Парсеры: Nokogiri — стандарт для разбора HTML/XML в Ruby (CSS и XPath).

Браузерная автоматизация: Ferrum — управление Chrome по CDP; Watir и Selenium — реальный браузер.

Навигация и фреймворки: Mechanize — ходит по ссылкам и работает с формами (без JS); Kimurai — фреймворк в духе Scrapy с поддержкой headless-движков.


Rust

HTTP-клиенты: reqwest — основной async-клиент; ureq — простой синхронный.

Парсеры: scraper — CSS-селекторы, по духу как BeautifulSoup/Cheerio; select — альтернативный селекторный парсер.

Браузерная автоматизация: fantoccini и thirtyfour — управление браузером по WebDriver; headless_chrome и chromiumoxide — работа с Chrome по DevTools Protocol.

Фреймворки: spider — высокопроизводительный конкурентный краулер.


Сравнительная таблица библиотек

Библиотека Язык Тип Исполняет JS Async / конкурентность Чем выделяется
requests Python HTTP-клиент Нет Нет Эталон простоты
httpx Python HTTP-клиент Нет Да Async + HTTP/2
curl_cffi Python HTTP-клиент Нет Да Подмена TLS-отпечатка
BeautifulSoup Python Парсер Низкий порог входа
selectolax Python Парсер Самый быстрый на объёмах
Playwright Python Браузер Да Да Авто-ожидания, мультибраузер
Selenium много языков Браузер Да Частично Ветеран, огромное сообщество
Scrapy Python Фреймворк Нет* Да Стандарт для масштабных краулов
cheerio JS / Node Парсер Быстрый jQuery-разбор статики
Puppeteer JS / Node Браузер Да Да Родное управление Chrome
Playwright JS / Node Браузер Да Да Мультибраузер, чистый API
Crawlee JS / Node Фреймворк Да Да Автопереключение HTTP/браузер
Guzzle PHP HTTP-клиент Нет Да Стандарт де-факто в PHP
Symfony DomCrawler PHP Парсер CSS-селекторы и XPath
Symfony Panther PHP Браузер Да Нет Реальный браузер для PHP
Roach PHP PHP Фреймворк Нет* Да Аналог Scrapy для PHP
Colly Go Фреймворк Нет Да Быстрый concurrent-краулинг
goquery Go Парсер jQuery-синтаксис
chromedp Go Браузер Да Да Стандарт для динамики в Go
Rod Go Браузер Да Да Современный API
libcurl C / C++ HTTP-клиент Нет Да Фундамент для всех языков
lexbor C / C++ Парсер Быстрый HTML/CSS-движок
HtmlAgilityPack C# Парсер Терпит «битый» HTML
AngleSharp C# Парсер W3C-совместимый, querySelector
PuppeteerSharp C# Браузер Да Да Puppeteer для .NET
Jsoup Java Парсер Главный парсер в Java
HtmlUnit Java Браузер Частично Да Headless-браузер на самой Java
WebMagic Java Фреймворк Нет Да Scrapy-подобный для Java
Nokogiri Ruby Парсер Стандарт разбора в Ruby
Ferrum Ruby Браузер Да Да Управление Chrome по CDP
Kimurai Ruby Фреймворк Да Да Scrapy-подобный для Ruby
reqwest Rust HTTP-клиент Нет Да Основной async-клиент
scraper Rust Парсер CSS-селекторы
thirtyfour Rust Браузер Да Да Управление по WebDriver
spider Rust Фреймворк Да Да Высокая производительность

* Фреймворки Scrapy и Roach PHP сами по себе исполняют только статичный HTML, но JS-рендеринг подключается плагином (Scrapy — через scrapy-playwright, Roach — через Browsershot). Знак «—» в колонке означает, что критерий к этому типу библиотек неприменим.


Как собрать рабочую связку

Короткая логика выбора инструментов под задачу:

  • Статичная страница или прямой запрос к API — достаточно HTTP-клиента и парсера: например, requests + BeautifulSoup, Guzzle + DomCrawler, net/http + goquery.
  • Контент подгружается через JavaScript, нужны клики и скролл — берите браузерную автоматизацию: Playwright, Puppeteer, chromedp.
  • Тысячи страниц, регулярный запуск, обработка и хранение данных — нужен фреймворк: Scrapy, Crawlee, Colly, Roach PHP.
  • Сайт активно блокирует ботов — добавляйте отдельный слой: подмену TLS-отпечатка (curl_cffi), стелс-режимы (nodriver, puppeteer-extra), прокси. Это работает поверх любой из библиотек выше и не зависит от выбора языка.

В следующих материалах разберём конкретные библиотеки на практических примерах — со сбором данных, постраничной навигацией и обходом блокировок.