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 / Kasus Penggunaan / Pengambilan Data dari Web & Analisis
Kasus penggunaan · Scraping web

Data web publik, yang disusun dalam format yang sesuai untuk SQL

Impor halaman publik apa pun atau seluruh situs ke dalam penyimpanan data Anda dalam bentuk JSON yang rapi: lowongan kerja, berita, ulasan, katalog, dan profil publik. Yozh menangani selektor, perlindungan anti-bot, upaya ulang, dan proxy — pemuat data Anda cukup menambahkan data ke Snowflake, BigQuery, atau Postgres.

$curl -s :8000/api/v1/scrape/batch -d @urls.json | jq -c '.results[]' | psql -c "COPY raw FROM stdin"
batch: g2.com/products
Target table
scraped_pages
Batch
200 urls 8 workers 1.0/s
Status
streaming · 247 / 200 rows
Yozh batch /scrape/batch
Pulling URL batch
Stealth fetch + retry
Parsing & normalizing
Emitting JSON-lines
COPY FROM stdin
Pipa menuju tumpukanmu
Mengapa sebagian besar pipeline mengalami korosi

Alat pengumpul data buatan sendiri menghabiskan 90% waktu analisis dan menghasilkan data yang tidak akurat

Sebuah "skrip Python kecil" berubah menjadi proses berbulan-bulan yang melibatkan pergantian cookie, rotasi proxy, perbaikan selektor, antrian percobaan ulang, dan pemberitahuan darurat pukul 3 pagi—semua itu hanya karena sumber kode mengubah nama sebuah kelas. Tim data menghabiskan kuartal ini untuk membangun kembali kerangka kerja alih-alih mengembangkan dasbor. Kami menyediakan empat komponen yang biasanya harus dibangun ulang dari awal oleh setiap tim — siap pakai.

Jika gudang Anda memiliki lebih banyak nulls daripada baris setelah perancangan ulang sumber — ini cocok untuk Anda.

Pengikis buatan sendiri yang rapuh akan membusuk dalam seperempat

Masalahnya. Sebuah skrip Python yang awalnya dibuat untuk akhir pekan berubah menjadi mesin internal yang rentan: antrian di sini, lapisan percobaan ulang di sana, tidak ada kemampuan pemantauan, serta selektor CSS yang selalu bermasalah setiap kali desain sumbernya diubah. Tim tersebut kini harus mengelola infrastruktur yang sebenarnya tidak pernah mereka inginkan.

Begini cara Yozh Scraper mengatasinya. Mesin yang siap digunakan di lingkungan produksi: eksekutor batch paralel, upaya ulang otomatis dengan back-off eksponensial, kode kesalahan terstruktur, dan fitur pemulihan mandiri LLM yang meregenerasi selektor yang rusak dari DOM aktif. Satu docker compose up menggantikan kode penghubung yang biasanya memakan waktu berbulan-bulan.

  • LLM self-heal
  • Batch + retry
  • Error terstruktur

Kode HTML yang berantakan di seluruh sumber

Masalahnya. Setiap situs menghasilkan kombinasi unik dari elemen div bersarang, blok JSON yang tidak terdokumentasi, dan format tanggal yang tidak seragam. Pemuat data Anda memerlukan langkah normalisasi sebelum masuk ke gudang data — dan langkah tersebut selalu menjadi yang pertama mengalami gangguan setiap kali sumbernya meluncurkan desain ulang.

Begini cara Yozh Scraper mengatasinya. Preset bawaan menghasilkan struktur JSON yang identik di seluruh sumber — kunci yang sama, tanggal dalam format ISO, serta mata uang yang disesuaikan dengan pengaturan wilayah. Sumber kustom? POST /api/v1/presets/generate dengan satu contoh URL — LLM akan menyimpulkan skema dan menulis selektor. Langsung dimasukkan ke dalam COPY ... FROM stdin.

  • Bentuk JSON sama
  • Tanggal ISO
  • Preset hasil LLM

Pertarungan melawan bot menghabiskan waktu sprint

Masalahnya. Proksi pusat data cepat rusak dalam satu sesi, sistem CAPTCHA menghalangi proses crawling di tengah pekerjaan, dan identifikasi sidik jari TLS mendeteksi browser headless dalam hitungan detik. Insinyur data akhirnya harus menangani masalah pemblokiran alih-alih mengembangkan dasbor. Tagihan proksi melonjak tajam sementara volume data mandek.

Begini cara Yozh Scraper mengatasinya. Integrasi bawaan dengan CyberYozh App Proxy melalui CYBERYOZH_API_KEY — 5 jenis proxy (residensial bergilir/tetap, seluler 4G/5G, pusat data, ISP) yang mencakup 250 kode negara. Versi Chromium tersembunyi dengan sidik jari yang disesuaikan secara otomatis menyesuaikan asal proxy. Sebagian besar alur tidak pernah menemui CAPTCHA.

  • 5 tipe proxy
  • 250 kode negara
  • Fingerprint warm

Pengaturan proses crawling secara ad-hoc

Masalahnya. "Menjelajahi situs ini, mengikis setiap halaman produk, dan memantau URL baru" merupakan satu tugas yang logis — namun dalam kode, hal itu melibatkan antrian, tabel deduplikasi, aturan cakupan, batas RPS, serta pembatalan dua tahap. Jika dibuat secara manual, sistem ini akan mengalami kegagalan saat dilakukan percobaan ulang dan secara diam-diam mengikis ulang URL yang sama.

Begini cara Yozh Scraper mengatasinya. Yozh Crawler menjelajahi situs dari sisi server, melakukan deduplikasi menggunakan hash SHA1 per-tugas, mengalirkan URL baru melalui SSE, dan meneruskannya ke scraper setiap kali ditemukan kecocokan. Pembatalan dua tahap (soft → force). Masukkan aliran data langsung ke Airflow / dbt / cron — orkestrasi tetap berada di dalam alat yang sudah Anda gunakan.

  • Streaming SSE
  • Dedup per-job
  • Airflow / dbt / cron
Cara kerjanya

Dari halaman web mentah hingga baris di gudang — dalam 3 langkah

Satu titik akhir untuk diekstraksi, satu format untuk dimuat. Hubungkan Yozh langsung ke loader, orchestrator, atau warehouse yang sudah Anda miliki — tanpa perlu lapisan perantara.

1 Nyalakan mesin

Kloning repositori tersebut dan docker compose up. Pengikis pada :8000, crawler aktif :8001. Tanpa akun SaaS, tanpa wizard kunci API — berjalan di VPC Anda.

# one-time setup
git clone 
  github.com/CyberYozh-data/yozh-scraper
cd yozh-scraper
docker compose up -d
2 Mengambil data secara massal dari daftar URL

Kirim (POST) batch URL Anda (hingga 200 per panggilan). Worker berjalan secara paralel, upaya ulang dan proxy ditangani di sisi server. Bentuk JSON yang sama di seluruh sumber.

curl 
  localhost:8000/api/v1/scrape/batch 
  -X POST 
  -d '{"urls": ["…", "…"],
       "preset": "auto",
       "concurrency": 8}'
3 Langsung ke gudang Anda

Hasil ditampilkan sebagai baris JSON. Alirkan melalui jq ke COPY ... FROM stdin di Postgres, atau muat langsung melalui klien Snowflake / BigQuery. Tanpa perantara.

# postgres example
curl :8000/api/v1/scrape/batch 
  -d @urls.json 
| jq -c '.results[]' 
| psql -c "COPY raw FROM stdin"
Contoh langsung

Apa yang Anda dapatkan — satu desain, untuk semua platform jual beli

Pilih salah satu preset untuk melihat seperti apa responsnya. Set bidang bervariasi tergantung sumbernya, tetapi bentuk permintaannya sama.


            
Resep

Bagaimana tim data menyusunnya — masing-masing dalam 10 baris

Tiga saluran beton dari halaman ke gudang, siap dipasang. Yozh menangani proses pengikisan — koordinator Anda menangani penjadwalannya.

1 Ringkasan harian → Postgres

Cron mengambil daftar URL, melakukan pengikisan data secara batch, dan mengalirkan baris-baris JSON langsung ke tabel sementara. dbt kemudian memprosesnya di tahap selanjutnya.

# crontab: every day at 06:00
0 6 * * * /usr/local/bin/snapshot.sh

# snapshot.sh
curl -s :8000/api/v1/scrape/batch 
  -d "@urls.json" 
| jq -c '.results[]' 
| psql -c "COPY raw_scrape FROM stdin"

# dbt build runs next in Airflow DAG
dbt build --select staging.raw_scrape+
200 URL/batch COPY FROM stdin cron / Airflow Anda
2 Pencarian Discovery → BigQuery

Lakukan crawling pada situs, ambil URL baru secara real-time saat ditemukan. Lakukan deduplikasi berdasarkan data kemarin, ambil hanya perubahan yang terjadi, lalu masukkan baris ke BigQuery begitu data tersebut masuk.

# stream discovered URLs over SSE
curl -N :8001/api/v1/crawl/start 
  -d '{"seed_url":"site.com",
       "scope":"same-domain",
       "max_pages":1000}' 
| jq -r 'select(.event=="found") | .url' 
| comm -13 yesterday.txt - 
| bq insert dataset.urls --source_format=NEWLINE_DELIMITED_JSON
Streaming SSE dedup per-job (SHA1) insert delta saja
3 Aliran berita → Kafka

Melakukan crawling dan scrape terhadap sumber berita, lalu mempublikasikan setiap artikel sebagai peristiwa Kafka. Pengguna hilir (dashboard, model sentimen, sistem peringatan) berlangganan berdasarkan topik.

# 1. continuous crawl of source list
curl -N :8001/api/v1/crawl/start 
  -d "@sources.json" 
| jq -c 'select(.event=="scraped") | .result' 
| kcat -P -t news.raw -b kafka:9092

# 2. consumers subscribe downstream
kcat -C -t news.raw | your-pipeline
rantai scrape + publish Producer Kafka topic per sumber
FAQ

Pertanyaan umum seputar scraping ke dalam gudang data

Sumber apa saja yang bisa saya kumpulkan datanya?
Halaman publik apa pun. Preset bawaan mencakup halaman-halaman dengan lalu lintas tertinggi — pasar daring, mesin pencari, YouTube, profil LinkedIn (dengan sesi). Untuk sumber kustom, panggil POST /api/v1/presets/generate satu URL contoh — LLM akan menyimpulkan skema dan menulis selektor, sehingga Anda mendapatkan preset yang dapat digunakan kembali dalam hitungan detik. Untuk halaman satu kali, POST /scrape/page dengan skema eksplisit extract: {...} skema eksplisit akan berfungsi tanpa perlu preset apa pun. Robots.txt dihormati secara default; patuhi aturan tersebut untuk sumber yang bukan milik Anda.
Bagaimana cara mengimpor data ke Snowflake / BigQuery / Postgres?
Scraper ini mengembalikan baris-baris JSON pada setiap batch dan aliran SSE pada setiap proses perayapan. Salurkan langsung ke pemuat data warehouse Anda: jq -c '.results[]' | psql -c "COPY raw FROM stdin" untuk Postgres, bq insert untuk BigQuery, snowsql --query "PUT ..." + COPY INTO untuk Snowflake, atau simpan ke S3/GCS dan biarkan Snowpipe / tabel eksternal yang sudah ada mengambil datanya. Tidak perlu mengelola konektor khusus — ini hanya JSON melalui HTTP.
Apakah saya bisa menjalankan ini di dalam VPC saya?
Ya — Yozh dijalankan secara mandiri. docker compose up Menyediakan dua kontainer (scraper + crawler) di dalam jaringan apa pun yang Anda tentukan: VPC, on-prem, atau air-gapped. Tanpa koneksi ke server pusat, tanpa ketergantungan pada SaaS. Lalu lintas keluar diarahkan ke target yang Anda scrape (dan secara opsional ke CyberYozh App Proxy jika Anda mengaktifkannya). Log, jejak, dan metrik tetap berada di tempat Anda menyimpannya — endpoint Prometheus di /metrics, log JSON terstruktur ke stdout.
Bagaimana cara kerja upaya ulang, kesalahan, dan observabilitas?
Setiap permintaan mendapatkan kuota percobaan ulang dengan penundaan eksponensial (dapat dikonfigurasi per panggilan). Kegagalan akan mengembalikan kode kesalahan terstruktur — BLOCKED, CAPTCHA, SELECTOR_FAIL, UPSTREAM_TIMEOUT — sehingga loader Anda dapat mengambil jalur alternatif berdasarkan kode tersebut alih-alih mengurai string. Ketika sebuah selektor rusak setelah perancangan ulang sumber, fitur pemulihan otomatis LLM akan meregenerasi selektor tersebut secara instan (lewati llm: {model: "..."}) dan menandai respons dengan self_heal: true untuk keperluan audit di tahap selanjutnya. Metrik Prometheus untuk kedalaman antrian, tingkat keberhasilan, dan latensi proxy sudah tersedia secara bawaan.
Bagaimana hal ini dapat diintegrasikan dengan Airflow / dbt / Temporal?
Yozh menangani proses pengambilan data; orchestrator Anda menangani penjadwalan. Pola paling sederhana: sebuah Airflow BashOperator (atau PythonOperator dengan requests) memanggil /scrape/batch, menyalurkan hasilnya ke tabel staging, lalu menghubungkannya ke tugas dbt di tahap selanjutnya. Proses pengambilan data menghasilkan aliran SSE — gunakan tugas yang berjalan lama atau bagi menjadi bagian-bagian yang dapat dilanjutkan kembali melalui job_id. Tidak adanya penjadwal bawaan berarti tidak ada ketergantungan: gunakan apa pun yang sudah dijalankan oleh platform data Anda.
Sumber Terbuka · Lisensi MIT · 84 ★

Sudah siap mengimpor data web ke gudang data Anda?

Satu konfigurasi Docker Compose, satu aliran data JSON-lines, semua sumber data dinormalisasi — langsung ke Snowflake, BigQuery, Postgres, dan Kafka. Gratis. Selamanya. Berikan bintang jika ini bermanfaat — setiap bintang sangat berarti.

Yozh Crawler + Scraper didistribusikan di bawah lisensi MIT. Silakan gunakan. Buat cabang (fork). Gunakan untuk mengembangkan aplikasi.

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