84 bintang di GitHub dan terus bertambah. Yozh Crawler + Scraper adalah perangkat lunak gratis, sumber terbuka, dan dikembangkan secara terbuka — berikan kami bintang jika alat ini layak masuk ke dalam tumpukan teknologi Anda.
CyberYozh Data / Yozh Scraper
Perangkat Lunak · Yozh Scraper

Masukkan satu URL, dapatkan data terstruktur yang rapi

Yozh Scraper menampilkan URL apa pun di browser Playwright yang sesungguhnya dan mengembalikan hasil persis seperti yang Anda minta — bidang yang diekstraksi, HTML mentah, atau tangkapan layar halaman penuh. Dilengkapi dengan proxy CyberYozh bawaan yang secara default beroperasi secara tersembunyi, pengaturan siap pakai untuk situs-situs utama, serta sesi yang terotentikasi. Bukan layanan SaaS, berjalan di :8000.

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

Scraping

Yozh Scraper menampilkan URL apa pun di browser Playwright yang sesungguhnya dan mengembalikan persis apa yang Anda minta — bidang yang diekstraksi, HTML mentah, atau tangkapan layar halaman penuh. Setiap proses pengikisan merupakan tugas asinkron: kirimkan URL, periksa status tugas, dan ambil hasilnya. Proksi, mode tersembunyi, preset, dan sesi terotentikasi semuanya didukung sepenuhnya.

  • Render browser sesungguhnya — Playwright menampilkan halaman yang dibuat dengan JS; beralih render untuk HTML statis.
  • Ekstraksi terstruktur — Aturan bidang CSS atau XPath menghasilkan objek yang rapi data , jauh lebih efisien daripada mengunduh dan mengurai HTML mentah sendiri.
  • Proksi bawaan — CyberYozh (residensial / LTE seluler / pusat data), dilengkapi dengan penargetan GEO dan tanpa pencarian ID pool.
  • Mode Stealth secara default — tambalan playwright-stealth (navigator.webdriver, sidik jari WebGL/Canvas, runtime Chrome) untuk mengurangi deteksi bot.
  • Preset — mengekstrak data dari Amazon / Google / eBay / Walmart / YouTube / LinkedIn berdasarkan nama, dengan fitur pemulihan otomatis LLM (opsional).
  • Sesi — sesi terotentikasi yang dikelola oleh server untuk target yang telah masuk, dan dapat digunakan kembali di seluruh proses pengumpulan data.
URL Dasarhttp://localhost:8000
Dokumentasi OpenAPIhttp://localhost:8000/docs
Titik akhir MCPhttp://localhost:8000/mcp
Dapat dipadukan dengan Yozh Crawler. Crawler ini (:8001) menjelajahi situs mulai dari satu URL awal dan mengambil setiap halaman melalui scraper ini — fitur render, proxy, dan sesi yang sama berlaku untuk halaman-halaman yang dijelajahi.

Mulai cepat

Pengikis itu muncul dari akarnya docker-compose.yml (bersamaan dengan crawler):

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

Pastikan sudah aktif:

bash
curl http://localhost:8000/api/v1/health
# {"status":"ok","workers":2}
Proksi memerlukan kunci API — atur CYBERYOZH_API_KEY di .env (dapatkan di app.cyberyozh.com/api-access). Tanpa kunci tersebut, hanya proxy_type: none yang berfungsi.

Penggunaan dasar

Setiap titik akhir scrape membuat tugas latar belakang dan mengembalikan sebuah job_id. Periksa status pekerjaan tersebut, lalu ambil hasilnya.

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

Hasil akhir berisi metadata serta apa pun yang Anda minta (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 gerakan queuedrunningdone (atau failed / cancelled). Hasilnya tersedia untuk done, failed, dan cancelled pekerjaan.

Mengekstrak data

Terapkan sebuah extract aturan, dan responsnya mencakup sebuah data objek yang diindeks berdasarkan nama bidang Anda — jauh lebih efisien daripada mengunduh raw_html dan menganalisisnya sendiri. Aturan-aturan tersebut css atau 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" } }

Setiap kolom merupakan sebuah aturan:

Kunci bidangTipeBawaanDeskripsi
selectorstringwajibSelektor CSS atau ekspresi XPath untuk bidang tersebut.
attrstringtextApa yang harus dibaca — text atau nama atribut (misalnya href, src).
allboolfalseKembalikan semua hasil yang cocok sebagai daftar, bukan hanya yang pertama.
requiredboolfalseTandai jika hilang — memicu proses pemulihan otomatis LLM yang telah diatur sebelumnya.

Gunakan "type": "xpath" bersama selektor XPath (misalnya //h1) untuk bentuk yang sama.

Tangkapan layar & kode HTML mentah

Atur screenshot: true untuk gambar PNG satu halaman penuh (dalam format base64 screenshot_base64), atau raw_html: true untuk mendapatkan HTML lengkap setelah dirender dalam 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 }'
Tangkapan layar memicu proses pengguliran untuk memuat gambar yang dimuat secara tertunda. Jika Anda juga menggunakan block_assets, nonaktifkan fitur tersebut untuk tangkapan layar agar gambar dapat ditampilkan.

Proxy

Untuk proses scraping yang andal, proxy sangat penting — kebanyakan situs modern memblokir permintaan langsung. Yozh terintegrasi dengan Layanan Proxy CyberYozh; atur proxy_type pada setiap permintaan.

proxy_typeApa itu
res_rotatingRotasi perumahan — pengaturan default yang direkomendasikan.
res_staticAlamat IP statis untuk penggunaan perumahan (IP khusus).
mobileSeluler / LTE, khusus.
mobile_sharedSeluler / LTE, pool bersama.
dc_staticPusat data statis.
noneKoneksi langsung, tanpa proxy.

Pilih lokasi dengan proxy_geo (country_code / region / city). Temukan apa yang telah Anda beli tanpa perlu mencari ID kolam:

cURL
curl "http://localhost:8000/api/v1/proxies/available?proxy_type=res_rotating"
curl "http://localhost:8000/api/v1/proxies/countries"
Proksi memerlukan CYBERYOZH_API_KEY di dalam scraper .env. Dapatkan satu di app.cyberyozh.com/api-access, lalu mulai ulang kontainer.

Preset

Sebuah preset menggabungkan profil permintaan + templat URL + resep penguraian, sehingga Anda dapat mengekstrak data dari sebuah situs berdasarkan namanya, alih-alih menyusun permintaan secara manual. Tersedia preset bawaan untuk Amazon, Google, eBay, Walmart, YouTube, dan LinkedIn; Anda juga dapat membuat preset sendiri (menggunakan CSS/XPath deterministik atau yang dihasilkan oleh AI).

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 adalah opsional. Tanpa parameter ini, parser deterministik berjalan sendiri; dengan parameter ini, selektor akan memperbaiki diri secara otomatis ketika required bidang tersebut kembali kosong. Kunci penyedia (OPENAI_API_KEY / ANTHROPIC_API_KEY / GEMINI_API_KEY / OPENROUTER_API_KEY) berada di sisi server dalam .env.

Kelola pengaturan default melalui GET /api/v1/presets, GET /api/v1/presets/{name}, dan POST /api/v1/presets (nama preset pengguna harus diawali dengan user_).

Sesi

Sesi terotentikasi yang dikelola server: buat satu sesi, masuk sekali, lalu serahkan session_id ke proses pengikisan mana pun sehingga halaman diambil dengan cookie yang tersimpan + status penyimpanan. Diperlukan untuk target yang sudah masuk seperti linkedin_profile pengaturan awal.

  1. POST /api/v1/sessions — buat. Pin device / proxy_type / proxy_geo dan TTL. Mengembalikan { session_id, expires_at }.
  2. POST /api/v1/sessions/{id}/login — menjalankan ulang skrip login deklaratif dengan creds di bagian isi: { script, creds }.
  3. POST /api/v1/scrape/page bersama session_id set — pengikisan yang terotentikasi.
  4. DELETE /api/v1/sessions/{id} — bersihkan.
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 dan cookies bersama-sama → 422. Hasil pengikisan device / proxy_type / proxy_pool_id / proxy_geo harus sesuai dengan nilai-nilai yang disematkan dalam sesi. Untuk CAPTCHA / 2FA yang tidak dapat diselesaikan oleh DSL login, lewati skrip tersebut dan masukkan cookie ke dalam sesi sebagai gantinya.

Pengambilan data secara batch

Kirimkan banyak halaman dalam satu tugas dengan POST /api/v1/scrape/pages — setiap entri merupakan permintaan pengambilan data lengkap. Periksa status dan ambil hasil melalui titik akhir tugas yang sama.

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" }
    ]
  }'
Sebuah penanda tingkat atas session_id berlaku untuk setiap halaman dalam batch (akan ditolak dengan kode 422 jika sebuah halaman sudah menandai halaman lain).

MCP

Scraper ini menghosting titik akhir Model Context Protocol di /mcp (Streamable HTTP). Arahkan Claude atau Cursor ke sana, dan alat-alat tersebut akan muncul secara otomatis:

  • 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"
}

Lalu cukup tanyakan: "Lakukan scraping pada https://example.com dan beritahu saya apa yang ada di halaman tersebut." Endpoint yang sama dapat digunakan baik dari agen LangChain maupun node n8n MCP Client Tool.

Panduan Konfigurasi

Permintaan — ScrapeRequest (terpilih)

BidangTipeBawaanDeskripsi
urlstring (URL)wajibHalaman yang akan ditampilkan dan diambil datanya.
renderbooltrueRender menggunakan browser (diperlukan untuk halaman yang dibuat dengan JS).
wait_untildomcontentloaded · networkidledomcontentloadedKetika halaman tersebut dianggap sudah siap.
wait_for_selectorstring · nullnullTunggu hingga elemen tertentu muncul sebelum melakukan penangkapan.
devicedesktop · mobiledesktopViewport / Profil UA.
proxy_typelihat ProksinoneKumpulan proxy yang dilalui oleh rute pengambilan data.
proxy_geoProxyGeo · nullnullPenargetan berdasarkan negara / wilayah / kota.
session_idstring · nullnullGunakan sesi yang telah diautentikasi — lihat Sesi.
stealthbooltrueTerapkan penguatan anti-deteksi.
block_assetsbool · nullenvBlokir gambar/font/media demi kecepatan (akan beralih ke BLOCK_ASSETS).
extractExtractRule · nullnullAturan bidang CSS/XPath → terstruktur data.
raw_htmlboolfalseSertakan kode HTML lengkap setelah proses rendering.
screenshotboolfalseSimpan gambar PNG satu halaman penuh (base64).

Referensi API

MetodeJalurTujuan
POST/api/v1/scrape/pageMengambil data dari satu halaman. Mengembalikan {"job_id":"…"}.
POST/api/v1/scrape/pagesMengambil data dari beberapa halaman sekaligus dalam satu tugas.
POST/api/v1/scrape/preset/pageLakukan pengambilan data berdasarkan nama preset (Amazon, Google, …).
GET/api/v1/scrape/{id}Status pekerjaan (dalam antrian/sedang berjalan/selesai/…).
GET/api/v1/scrape/{id}/resultsHasil pencarian (halaman + ScrapeResponse).
DELETE/api/v1/scrape/{id}Pembatalan lunak — halaman selama penerbangan selesai.
POST/api/v1/sessionsBuat sesi yang terotentikasi.
POST/api/v1/sessions/{id}/loginJalankan skrip login deklaratif.
DELETE/api/v1/sessions/{id}Hapus sesi.
GET/api/v1/proxies/availableMenampilkan daftar proxy yang telah dibeli dari suatu jenis.
GET/api/v1/presetsDaftar preset bawaan dan preset pengguna.
GET/api/v1/healthKesehatan + jumlah pekerja.

Rincian penting

Proxy memerlukan kunci API. Atur CYBERYOZH_API_KEY di dalam scraper .env. Tanpa itu, hanya proxy_type: none (langsung) yang berfungsi.
Tugas asinkron yang dijalankan di memori. Setiap proses pengambilan data merupakan tugas latar belakang; penyimpanan data berada di memori dan akan direset saat kontainer dimulai ulang. Ambil hasilnya selagi masih tersedia, atau simpan sendiri.
Sesi ini bersifat eksklusif dengan cookie. Dengan mengirimkan keduanya session_id dan cookies akan menghasilkan kode status 422, dan permintaan harus sesuai dengan sesi yang disematkan device / proxy_type / proxy_geo.
Fitur pemulihan otomatis LLM berada di sisi server. Fitur pemulihan otomatis yang telah diatur sebelumnya menggunakan kunci penyedia (OPENAI / ANTHROPIC / GEMINI / OPENROUTER) dari .env — yang tidak pernah dikirim oleh klien.

Disukai oleh tim data dan pengembang AI

Apa yang dikatakan oleh para pengembang yang menggunakan Yozh

5.0 / 5 · Ulasan 5
GitHub
Dalam satu sore, kami mengganti klaster Playwright internal kami dengan Yozh. Titik akhir MCP langsung terintegrasi ke dalam agen Claude kami — tanpa perlu kode penghubung sama sekali, crawler dan scraper langsung berfungsi dengan baik.
Marcus Reinhardt Insinyur Data Utama Northwind Analytics
X
Sistem preset ini adalah fitur andalannya. Kami memasukkan nama sumber dan mendapatkan respons JSON yang rapi; fitur pemulihan otomatisnya bahkan berhasil mendeteksi dua perubahan tata letak Amazon sebelum kami menyadarinya.
Priya Nair Pendiri ScrapeStack
Reddit
Akhirnya, ada scraper sumber terbuka yang memperlakukan proxy dan sesi sebagai fitur utama. Kami menjalankannya di balik sistem otentikasi untuk portal mitra — sesi tetap aktif dan hasilnya tetap konsisten di seluruh wilayah.
Daniel Osei Insinyur Backend Loopfeed
X
Setelah menghubungkannya ke Cursor melalui MCP, agen saya kini dapat mengambil data web secara langsung di tengah-tengah tugas. Proses pengambilan data streaming melalui SSE inilah yang selama ini menjadi hal yang kurang dalam alur kerja agen.
Elena Kovac Insinyur Kecerdasan Buatan Vektor Labs
GitHub
Kami beralih dari API pengambilan data berbayar untuk menghemat biaya dan bersiap menghadapi penurunan kualitas layanan — ternyata hasilnya justru sebaliknya. Sistem ini dihosting sendiri, tanpa tagihan per permintaan, dan skema outputnya lebih rapi daripada yang dulu kami bayar.
Sofia Almeida Manajer Teknik Tabbly
Sumber Terbuka · Lisensi MIT · 84 ★

Render sebuah URL. Dapatkan data yang bersih sebagai hasilnya

Yozh Scraper adalah mesin rendering yang menjadi tulang punggung seluruh sistem — satu docker compose up dan Anda akan memiliki proxy, fitur stealth, preset, sesi, dan ekstraksi, serta dukungan MCP, di infrastruktur Anda sendiri. Gratis. Selamanya.

Yozh Scraper + Crawler didistribusikan di bawah lisensi MIT. Silakan gunakan. Silakan buat cabang (fork). Silakan kembangkan dengan ini.