84 зірок на GitHub, і їхня кількість продовжує зростати. Yozh Crawler + Scraper — це безкоштовний проект з відкритим кодом, який розробляється відкрито. Поставте нам зірку, якщо він заслуговує на місце у вашому стеку.
CyberYozh Data / Yozh Scraper
Програмне забезпечення · Yozh Scraper

Введіть один URL-адресу — отримайте чисті структуровані дані

Yozh Scraper відображає будь-яку URL-адресу в реальному браузері Playwright і повертає саме те, що ви запитуєте — витягнуті поля, необроблений HTML або знімок екрана всієї сторінки. Вбудовані проксі CyberYozh, які за замовчуванням працюють у прихованому режимі, пресети для основних сайтів та сесії з автентифікацією. Не є SaaS, працює на :8000.

$curl -X POST :8000/api/v1/scrape/page -d '{"url":"https://site.com", "proxy_type":"res_rotating","extract":{"type":"css","fields":{...}}}'

Скрейпінг

Yozh Scraper відображає будь-яку URL-адресу в реальному браузері Playwright і повертає саме те, що ви просите — витягнуті поля, необроблений HTML або знімок екрана всієї сторінки. Кожен скрейп — це асинхронне завдання: вкажіть URL-адресу, перевірте стан завдання, отримайте результат. Проксі, прихований режим, пресети та сесії з автентифікацією — все це працює на найвищому рівні.

  • Реальне відтворення у браузері — Playwright відтворює сторінки, створені за допомогою JavaScript; переключіть render для статичного HTML.
  • Структуроване вилучення — правила для полів на основі CSS або XPath повертають очищений data об’єкт, що набагато ефективніше, ніж самостійне завантаження та аналіз необробленого HTML-коду.
  • Вбудовані проксі-сервери — CyberYozh (побутові / мобільні LTE / центри обробки даних) з геотаргетингом та без виявлення ідентифікаторів пулів.
  • Режим «Stealth» за замовчуванням — патчі playwright-stealth (navigator.webdriver, відбитки WebGL / Canvas, середовище виконання Chrome) для зменшення ймовірності виявлення ботів.
  • Пресети — збір даних з Amazon, Google, eBay, Walmart, YouTube та LinkedIn за назвою, з опціональною функцією самовідновлення на основі LLM.
  • Сесії — сесії з автентифікацією, що керуються сервером для цілей, які увійшли в систему, і використовуються повторно під час збору даних.
Базова URL-адресаhttp://localhost:8000
Документація OpenAPIhttp://localhost:8000/docs
Кінцева точка MCPhttp://localhost:8000/mcp
Працює у поєднанні з Yozh Crawler. Цей сканер (:8001) обходить сайт, починаючи з одного початкового URL-адреси, і завантажує кожну сторінку за допомогою цього скрепера — до обхоплених сторінок застосовуються ті самі функції рендерингу, проксі та сеансів.

Швидкий старт

Скрейпер піднімається від кореня docker-compose.yml (поруч із краулером):

bash
cp .env.example .env          # set CYBERYOZH_API_KEY if using proxies
docker compose up --build
# scraper → http://localhost:8000
# crawler → http://localhost:8001

Перевірте, чи все працює:

bash
curl http://localhost:8000/api/v1/health
# {"status":"ok","workers":2}
Для проксі-серверів потрібен ключ API — налаштуйте CYBERYOZH_API_KEY в .env (отримати його можна за адресою app.cyberyozh.com/api-access). Без нього працюватимуть лише proxy_type: none працює.

Основні принципи використання

Кожна кінцева точка скрейпу створює фонове завдання та повертає job_id. Перевіряйте стан завдання, а потім отримуйте його результати.

cURL
curl -X POST http://localhost:8000/api/v1/scrape/page 
  -H "Content-Type: application/json" 
  -d '{ "url": "https://example.com", "proxy_type": "none" }'
# → { "job_id": "req_abc123" }

curl http://localhost:8000/api/v1/scrape/req_abc123          # status
curl http://localhost:8000/api/v1/scrape/req_abc123/results  # results

Кінцевий результат містить метадані та все, що ви запитували (data, raw_html, screenshot_base64):

JSON
{
  "job_id": "req_abc123",
  "status": "done",
  "total": 1, "done": 1,
  "results": [
    {
      "request_id": "req_abc123",
      "took_ms": 1234,
      "meta": { "url": "https://example.com", "final_url": "https://example.com/",
                "status_code": 200, "device": "desktop", "proxy_type": "none", "retries": 0 },
      "data": null, "raw_html": null, "screenshot_base64": null, "warnings": []
    }
  ]
}
status рухи queuedrunningdone (або failed / cancelled). Результати доступні для done, failed, та cancelled завдання.

Витягнути дані

Виконати extract правило, і у відповіді буде data об’єкт, ключами якого є назви ваших полів — це набагато ефективніше, ніж завантажувати raw_html та аналізувати його самостійно. Правила — це css або xpath.

cURL
curl -X POST http://localhost:8000/api/v1/scrape/page 
  -H "Content-Type: application/json" 
  -d '{
    "url": "https://example.com",
    "extract": {
      "type": "css",
      "fields": {
        "title": { "selector": "h1", "attr": "text", "required": true }
      }
    }
  }'
# result → { "data": { "title": "Example Domain" } }

Кожне поле є правилом:

Польовий ключТипЗа замовчуваннямОпис
selectorstringобов’язковеCSS-селектор або вираз XPath для цього поля.
attrstringtextЩо почитати — text або ім'я атрибута (наприклад, href, src).
allboolfalseПовернути всі збіги у вигляді списку, а не лише перший.
requiredboolfalseПовідомляти про відсутність — запускає попередньо налаштовану функцію самовідновлення LLM.

Використовуйте "type": "xpath" разом із селекторами XPath (наприклад, //h1) для фігури такого самого типу.

Скріншоти та вихідний HTML-код

Встановити screenshot: true для PNG на всю сторінку (у форматі base64 у screenshot_base64), або raw_html: true щоб отримати повний HTML-код після рендерингу у raw_html.

cURL
curl -X POST http://localhost:8000/api/v1/scrape/page 
  -H "Content-Type: application/json" 
  -d '{ "url": "https://example.com", "screenshot": true, "raw_html": true }'
Скріншоти запускають цикл прокрутки для завантаження зображень за принципом «lazy loading». Якщо ви також використовуєте block_assets, вимкніть цю функцію для скріншотів, щоб зображення відображалися.

Проксі

Для надійного веб-скрейпінгу проксі-сервери є незамінними — більшість сучасних сайтів блокують прямі запити. Yozh інтегрований із сервісом проксі-серверів CyberYozh; налаштуйте proxy_type для будь-якого запиту.

proxy_typeЩо це таке
res_rotatingПочергове використання житлових приміщень — рекомендований варіант за замовчуванням.
res_staticСтатична IP-адреса для домашнього використання (виділена IP-адреса).
mobileМобільний зв'язок / LTE, виділений канал.
mobile_sharedМобільний зв'язок / LTE, спільний пул.
dc_staticСтатична інформація про центр обробки даних.
noneПряме підключення, без проксі.

Виберіть місце розташування за допомогою proxy_geo (country_code / region / city). Дізнайтеся, що ви придбали, не шукаючи ідентифікатори пулів:

cURL
curl "http://localhost:8000/api/v1/proxies/available?proxy_type=res_rotating"
curl "http://localhost:8000/api/v1/proxies/countries"
Проксі-сервери вимагають CYBERYOZH_API_KEY у скрепері .env. Отримайте його за адресою app.cyberyozh.com/api-access, а потім перезапустіть контейнер.

Пресети

Пресет об’єднує профіль запиту + шаблон URL-адреси + алгоритм розбору, завдяки чому ви можете збирати дані з сайту за назвою, замість того щоб вручну складати запит. Вбудовані пресети доступні для Amazon, Google, eBay, Walmart, YouTube та LinkedIn; ви також можете створювати власні (детерміновані на основі CSS/XPath або згенеровані за допомогою штучного інтелекту).

cURL
curl -X POST http://localhost:8000/api/v1/scrape/preset/page 
  -H "Content-Type: application/json" 
  -d '{
    "source": "amazon_product",
    "preset_params": { "asin": "B08N5WRWNW" },
    "locale": "us",
    "llm": { "model": "openai/gpt-5.4-mini" }
  }'
# → { "job_id": "..." }  then GET /api/v1/scrape/<job_id>/results
llm є необов’язковим. Без нього детермінований парсер працює самостійно; з ним селектори самовідновлюються, коли required поле повертається порожнім. Ключі провайдера (OPENAI_API_KEY / ANTHROPIC_API_KEY / GEMINI_API_KEY / OPENROUTER_API_KEY) знаходяться на стороні сервера в .env.

Керуйте пресетами за допомогою GET /api/v1/presets, GET /api/v1/presets/{name}, а також POST /api/v1/presets (назви користувацьких пресетів повинні починатися з user_).

Сесії

Сесії з автентифікацією, що керуються сервером: створіть одну, увійдіть один раз, а потім передавайте її session_id для будь-якого скрейпу, щоб сторінки завантажувалися із збереженими файлами cookie та станом сховища. Необхідно для цілей, що вимагають входу, таких як linkedin_profile пресет.

  1. POST /api/v1/sessions — create. Pins device / proxy_type / proxy_geo та TTL. Повертає { session_id, expires_at }.
  2. POST /api/v1/sessions/{id}/login — запустити декларативний скрипт входу з creds у тілі: { script, creds }.
  3. POST /api/v1/scrape/page з session_id set — скрейпінг з авторизацією.
  4. DELETE /api/v1/sessions/{id} — прибрати.
cURL
# 1. create  →  {"session_id":"sess_...","expires_at":...}
curl -X POST http://localhost:8000/api/v1/sessions 
  -H "Content-Type: application/json" 
  -d '{ "device": "desktop", "proxy_type": "res_rotating" }'

# 2. log in (declarative DSL + creds)
curl -X POST http://localhost:8000/api/v1/sessions/sess_.../login 
  -H "Content-Type: application/json" 
  -d '{ "script": { "steps": [ {"op":"goto","url":"https://site/login"} ] },
        "creds": { "username": "...", "password": "..." } }'

# 3. scrape with the session
curl -X POST http://localhost:8000/api/v1/scrape/page 
  -H "Content-Type: application/json" 
  -d '{ "url": "https://site/secure", "session_id": "sess_...", "raw_html": true }'
session_id та cookies разом → 422. Дані, отримані в результаті скрейпінгу, device / proxy_type / proxy_pool_id / proxy_geo повинні збігатися із закріпленими значеннями сесії. У разі CAPTCHA / 2FA, які DSL-скрипт для входу не може вирішити, пропустіть скрипт і замість цього вставте файли cookie в сесію.

Пакетне вилучення даних

Надішліть багато сторінок одним завданням за допомогою POST /api/v1/scrape/pages — кожен запис є окремим запитом на зчитування даних. Перевіряйте стан та отримуйте результати через ті самі кінцеві точки завдання.

cURL
curl -X POST http://localhost:8000/api/v1/scrape/pages 
  -H "Content-Type: application/json" 
  -d '{
    "pages": [
      { "url": "https://example.com", "proxy_type": "none" },
      { "url": "https://example.org", "proxy_type": "none" }
    ]
  }'
Елемент верхнього рівня session_id застосовується до кожної сторінки в пакеті (відхиляється з кодом 422, якщо сторінка вже прив’язана до іншої).

MCP

Скрейпер встановлює кінцеву точку протоколу Model Context Protocol за адресою /mcp (Streamable HTTP). Наведіть Claude або Cursor на неї, і інструменти з’являться автоматично:

  • run_scrape_page
  • run_scrape_pages
  • get_job_status
  • get_job_result
  • cancel_scrape_job
  • health
~/.claude/settings.json
"yozh-scraper": {
  "type": "http",
  "url": "http://localhost:8000/mcp"
}

Тоді просто задайте запит: «Зчитай вміст сторінки https://example.com і скажи, що там є». Цей самий кінцевий пункт працює як з агента LangChain, так і з вузла n8n MCP Client Tool.

Довідник з налаштування

Запит — ScrapeRequest (вибрано)

ПолеТипЗа замовчуваннямОпис
urlрядок (URL)обов’язковеСторінка, яку потрібно відобразити та зібрати дані.
renderbooltrueВідобразити у браузері (необхідно для сторінок, створених за допомогою JS).
wait_untildomcontentloaded · networkidledomcontentloadedКоли сторінка вважається готовою.
wait_for_selectorрядок · nullnullПеред зйомкою дочекайтеся появи певного елемента.
devicedesktop · mobiledesktopВікно перегляду / профіль UA.
proxy_typeдив. «Проксі»noneПул проксі-серверів, через які здійснюється завантаження маршрутів.
proxy_geoProxyGeo · nullnullОрієнтація на країну / регіон / місто.
session_idрядок · nullnullВикористовуйте сесію з автентифікацією — див. розділ «Сесії».
stealthbooltrueЗастосуйте заходи з посилення захисту від виявлення.
block_assetsbool · nullenvБлокувати зображення/шрифти/медіа для підвищення швидкості (у разі необхідності використовується BLOCK_ASSETS).
extractExtractRule · nullnullПравила для полів CSS/XPath → структуровані data.
raw_htmlboolfalseВключити повний HTML-код після рендерингу.
screenshotboolfalseЗбережіть PNG-файл на всю сторінку (у форматі base64).

Довідник API

МетодШляхПризначення
POST/api/v1/scrape/pageЗчитувати одну сторінку. Повертає {"job_id":"…"}.
POST/api/v1/scrape/pagesЗбирайте дані з декількох сторінок одночасно в рамках одного завдання.
POST/api/v1/scrape/preset/pageЗчитування даних за назвою пресета (Amazon, Google, …).
GET/api/v1/scrape/{id}Статус завдання (у черзі/виконується/завершено/…).
GET/api/v1/scrape/{id}/resultsРезультати виконання завдання (сторінки + ScrapeResponse).
DELETE/api/v1/scrape/{id}М'яке скасування — завершення сторінок під час польоту.
POST/api/v1/sessionsСтворити сеанс із автентифікацією.
POST/api/v1/sessions/{id}/loginЗапустіть декларативний скрипт входу в систему.
DELETE/api/v1/sessions/{id}Видалити сеанс.
GET/api/v1/proxies/availableВивести список придбаних проксі-серверів певного типу.
GET/api/v1/presetsПерелік вбудованих та користувацьких пресетів.
GET/api/v1/healthСтан здоров’я + кількість працівників.

Важливі деталі

Для проксі-серверів потрібен ключ API. Встановіть CYBERYOZH_API_KEY у налаштуваннях скрепера .env. Без нього працює лише proxy_type: none працюватимуть (прямі) з'єднання.
Асинхронні завдання, що виконуються в оперативній пам'яті. Кожен скрейп — це фонове завдання; дані зберігаються в оперативній пам'яті та скидаються під час перезапуску контейнера. Отримуйте результати, поки вони доступні, або зберігайте їх самостійно.
Сесії є ексклюзивними за допомогою файлів cookie. При передачі обох session_id і cookies повертає код 422, а запит повинен відповідати закріпленому в сесії device / proxy_type / proxy_geo.
Функція самовідновлення LLM реалізована на стороні сервера. У попередньо налаштованому режимі самовідновлення використовуються ключі провайдера (OPENAI / ANTHROPIC / GEMINI / OPENROUTER) з .env — які клієнт ніколи не надсилає.

Нас люблять data-команди та AI-розробники

Що кажуть люди, які створюють проекти за допомогою Yozh

5,0 / 5 · Огляд 5
GitHub
За одне післяобіддя ми замінили наш внутрішній кластер Playwright на Yozh. Кінцева точка MCP одразу ж інтегрувалася в наш агент Claude — жодного допоміжного коду, а сканер і скрепер просто запрацювали.
Marcus Reinhardt Головний інженер з обробки даних Northwind Analytics
X
Система пресетів — це головна фішка. Ми передаємо назву джерела й отримуємо у відповідь чистий JSON; функція автоматичного відновлення навіть встигла виявити дві зміни у макеті Amazon ще до того, як ми їх помітили.
Priya Nair Засновник ScrapeStack
Reddit
Нарешті з’явився скрейпер з відкритим кодом, який розглядає проксі-сервери та сесії як повноцінні компоненти. Ми використовуємо його для доступу до партнерських порталів, що вимагають авторизації — сесії зберігаються, а результати залишаються однаковими в усіх регіонах.
Daniel Osei Інженер бекенду Loopfeed
X
Підключив його до Cursor через MCP, і тепер мій агент отримує веб-дані в режимі реального часу під час виконання завдання. Потокове сканування через SSE — це саме те, чого бракувало робочим процесам агента.
Elena Kovac Інженер з штучного інтелекту Vektor Labs
GitHub
Ми відмовилися від платного API для зчитування даних, щоб скоротити витрати, і готувалися до погіршення якості — але отримали зовсім протилежний результат. Сервіс розміщений на власному хостингу, оплата не стягується за кожен запит, а схема вихідних даних є чіткішою, ніж та, за яку ми раніше платили.
Sofia Almeida Керівник інженерного відділу Tabbly
Відкрите програмне забезпечення · Ліцензія MIT · 84 ★

Опрацювати URL-адресу. Отримати чисті дані

Yozh Scraper — це рушій рендерингу, на якому базується весь стек — один docker compose up — і ви отримуєте проксі, стелс, пресети, сесії та екстракцію, сумісні з MCP, на вашій власній інфраструктурі. Безкоштовно. Назавжди.

Yozh Scraper + Crawler розповсюджується за ліцензією MIT. Користуйтеся ним. Створюйте форки. Розробляйте на його основі.