В отдельной статье мы разбирали, на каком языке писать парсер, и сравнивали языки между собой. Здесь — следующий уровень детализации: каталог конкретных библиотек. Если язык уже выбран, остаётся подобрать инструменты, и вот их обзор — с разбивкой по языкам, ролям и ссылками на официальные сайты.
Четыре роли библиотек
Прежде чем перечислять конкретные пакеты, важно понять, что почти любой парсер собирается из инструментов четырёх типов. Часто одну библиотеку используют не саму по себе, а в связке: например, 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), прокси. Это работает поверх любой из библиотек выше и не зависит от выбора языка.
В следующих материалах разберём конкретные библиотеки на практических примерах — со сбором данных, постраничной навигацией и обходом блокировок.