Screen scraping: alat, contoh Python, dan otomatisasi

Halaman produk menampilkan judul, harga, dan ketersediaan, tetapi Anda membutuhkan detail tersebut dalam dataset yang bisa diperbarui dan dibandingkan.
Panduan ini memakai Yozh Scraper dari CyberYozh untuk mendemonstrasikan screen scraping, mulai dari satu halaman hingga pengumpulan data yang bisa diulang.
Anda akan belajar cara memilih metode ekstraksi, memeriksa apakah hasilnya sesuai dengan halaman, dan menyimpan rekaman yang berguna. Setelah itu, kita akan membahas opsi Python dan otomatisasi untuk mengulang tugas tersebut, beserta pengaturan proxy saat lokasi atau konsistensi koneksi penting.
Apa yang dilakukan screen scraping
Screen scraping mengekstrak data yang ditampilkan melalui situs web, aplikasi desktop, atau antarmuka terminal. Teknik ini dapat membaca teks dari elemen antarmuka atau memakai optical character recognition (OCR) untuk mengenali teks pada gambar.
Apa itu screen scraping?
Screen scraping adalah ekstraksi otomatis informasi yang ditampilkan melalui antarmuka pengguna. Screen scraper membaca informasi tersebut dan mengubahnya menjadi data yang dapat dipakai sistem lain, misalnya baris spreadsheet atau kolom dalam file JSON.
Cara kerja scraper bergantung pada sumbernya:
Halaman web: Browser memuat halaman produk, lalu scraper mengumpulkan judul, harga, dan ketersediaan dari konten yang sudah dirender.
Aplikasi lama (legacy): Otomatisasi membaca informasi inventaris atau pelanggan dari sistem bisnis lama yang tidak punya opsi ekspor yang memadai.
Gambar: Optical character recognition (OCR) mengubah teks pada tangkapan layar atau gambar hasil pindai menjadi karakter yang dapat dibaca mesin.
Bagaimana cara kerja screen scraping?
Pada halaman produk, misalnya Amazon, browser memuat antarmuka, aturan ekstraksi mengidentifikasi nilai, dan validasi memeriksa apakah hasilnya dapat dipakai. Prosesnya terdiri dari lima tahap:
Buka halaman. Akses URL produk dengan pengaturan lokasi dan sesi yang dibutuhkan untuk tugas Anda.
Tunggu konten yang diperlukan. Pastikan harga dan ketersediaan sudah termuat sebelum mengumpulkannya.
Temukan dan ekstrak kolom data. Gunakan aturan pemilihan untuk mengambil judul produk, harga, mata uang, dan status stok.
Validasi nilai. Periksa kolom yang hilang, mata uang yang tidak terduga, dan pesan galat yang tanpa sengaja terambil sebagai data produk.
Simpan hasilnya. Simpan rekaman beserta URL sumber dan waktu pengumpulannya agar hasil bisa dibandingkan nanti.
Amazon scraper Anda dapat mengembalikan kolom yang diekstrak beserta tangkapan layar. Menyimpan keduanya membantu menyelidiki perbedaan: Anda bisa membandingkan nilai yang hilang atau salah dengan tampilan di browser dan menemukan di mana ekstraksi bermasalah.
Screen scraping vs. web scraping dan API
Pilih metode yang menyediakan kolom data yang dibutuhkan dengan pemrosesan tambahan seminimal mungkin. Periksa dulu apakah ada API atau ekspor yang berguna, lalu tentukan apakah data tersedia di HTML halaman atau memerlukan interaksi browser.
Metode | Yang dibaca | Kapan cocok | Kebutuhan pemeliharaan utama |
API atau ekspor | Respons terstruktur atau file yang dapat diunduh | Sumber menyediakan kolom data yang Anda butuhkan | Pantau perubahan skema, persyaratan akses, dan kuota |
Ekstraksi HTML langsung | HTML yang dikirim oleh server | Nilai sudah tersedia tanpa menjalankan JavaScript | Perbarui aturan ekstraksi saat markup berubah |
Ekstraksi berbasis browser | Elemen halaman setelah dirender atau setelah interaksi | Konten bergantung pada JavaScript, filter, atau status sesi | Pelihara selektor, kondisi pemuatan, dan sesi |
OCR atau otomatisasi desktop | Piksel gambar, teks terminal, atau kontrol aplikasi | Antarmuka menyediakan data tanpa opsi ekspor yang berguna | Periksa perubahan tata letak, pengenal kontrol, dan akurasi pengenalan |
Screen scraping dan web scraping saling tumpang tindih. Merender situs web dan membaca elemen halamannya tetap termasuk web scraping; memakai browser tidak otomatis berarti menafsirkan piksel.
Yozh Scraper cocok untuk jalur berbasis browser, di mana rendering, status halaman, dan pengaturan ekstraksi yang dapat dipakai ulang membantu membuat pengumpulan data bisa diulang.
Tools screen scraping: pilih berdasarkan sumber data
Tools web screen scraping yang tepat bergantung pada lokasi data muncul dan cara Anda mengaksesnya. Tools screen scraping open source mencakup otomatisasi browser dan OCR, sedangkan platform yang lebih luas juga mendukung proses desktop.
Yozh Scraper: layanan ekstraksi browser siap pakai
Yozh Scraper menyediakan API self-hosted yang memakai Playwright untuk memuat halaman web dan mengembalikan kolom terpilih, HTML, serta tangkapan layar. Preset dan batch job membantu Anda mengulang konfigurasi ekstraksi yang sudah teruji.
Instal dengan Docker; visual tester opsional berjalan terpisah dan membutuhkan Node.js. Perangkat lunaknya gratis dan open source, sedangkan hosting server, proxy berbayar, dan penggunaan penyedia AI opsional dikenai biaya tersendiri. Anda bisa memulai secara lokal tanpa mengaktifkan integrasi berbayar. Bagian berikutnya memakai Yozh untuk mengonfigurasi ekstraksi dan memverifikasi hasilnya.
Playwright: kontrol browser langsung dari Python
Pilih Playwright jika Anda ingin membuat skrip klik, filter, dan navigasi dengan Python. Playwright menyediakan otomatisasi browser, sementara kode Anda menentukan ekstraksi, validasi, dan penyimpanan. Anda yang memelihara selektor dan kondisi pemuatan.
Tesseract: pengenalan teks dari gambar
Tesseract menyediakan mesin OCR yang mengubah teks pada gambar menjadi keluaran yang dapat dibaca mesin. Padukan dengan tool tangkapan layar atau pengambil gambar saat teks yang dibutuhkan hanya ada dalam bentuk piksel.
UiPath: otomatisasi lintas antarmuka aplikasi
UiPath cocok untuk tugas yang melibatkan perangkat lunak desktop, sistem lama, dan banyak aplikasi sekaligus. Opsi ekstraksi antarmuka dan OCR-nya membantu mengotomatiskan proses di mana tool browser saja tidak dapat menjangkau semua informasi yang diperlukan.
Cara melakukan screen scraping dengan Yozh Scraper
Mulailah dengan halaman produk latihan yang kolom datanya mudah diprediksi. Kontennya yang statis berguna untuk mempelajari kontrol sebelum menangani situs web dinamis.
1. Tentukan keluaran
Buat rekaman yang berisi judul produk, harga, ketersediaan, URL sumber, dan waktu pengumpulan. Ekstrak tiga yang pertama dari halaman; tambahkan URL dan stempel waktu UTC saat menyimpan rekaman.
2. Jalankan scraper
Dengan Git dan Docker terpasang, ikuti panduan instalasi Yozh Scraper:
git clone https://github.com/CyberYozh-data/yozh-scraper
cd yozh-scraper
cp .env.example .env
docker compose up --build3. Buka visual tester
Tester dijalankan secara terpisah dan membutuhkan Node.js. Di terminal lain, masuk ke folder repositori lalu jalankan:
cd scraper-tester
npm install
node server.jsBuka http://localhost:7000 dan pastikan koneksi ke scraper berfungsi normal.
4. Konfigurasikan ekstraksi
Di Scrape Page, masukkan URL latihan, pilih koneksi langsung (none), dan konfigurasikan ekstraksi CSS dengan aturan berikut:
Kolom | Selektor CSS |
Judul | .product_main h1 |
Harga | .product_main .price_color |
Ketersediaan | .product_main .availability |
Baca teks setiap elemen dan tandai kolom sebagai wajib. Atur wait_for_selector ke .product_main .price_color. Aktifkan keluaran tangkapan layar dan biarkan pemblokiran gambar tetap nonaktif.
5. Jalankan sampel kecil
Jalankan satu halaman dan bandingkan nilai yang diekstrak dengan tangkapan layarnya. Periksa spasi dan pertahankan mata uang sebelum menyimpan rekaman Anda. Nilai-nilai ini hanya untuk demonstrasi, bukan data pasar yang sebenarnya.
6. Simpan preset yang dapat dipakai ulang
Buka Presets, ambil sampel yang sama, pilih Manual, lalu masukkan aturan yang sudah terverifikasi. Gunakan Verify, lalu simpan preset dengan nama yang deskriptif. Pilih preset tersebut di Scrape Page dan uji halaman buku lain sebelum memperluas pengumpulan. Pemilihan kolom dengan bantuan AI juga tersedia jika sudah dikonfigurasi.
Jika target berikutnya memerlukan akses regional, konfigurasikan kunci API CyberYozh dan koneksi proxy yang Anda beli. Proxy residensial rotating mendukung lokasi dan geotargeting; periksa wilayah yang dikembalikan sebelum mengumpulkan dataset yang lebih besar.
Screen scraping dengan Python: ekstrak dan simpan data halaman
Screen scraping dengan Python memberi Anda kontrol atas navigasi halaman, ekstraksi, dan penyimpanan. Contoh ini memakai halaman produk Books to Scrape dan selektor yang sama seperti pada panduan visual, lalu menyimpan rekaman yang sudah tervalidasi sebagai JSON.
Instal Playwright dengan python -m pip install playwright, lalu python -m playwright install chromium. Simpan skrip sebagai scrape_product.py dan jalankan python scrape_product.py.
Untuk koneksi CyberYozh opsional, atur variabel lingkungan berikut di shell yang menjalankan skrip:
CYBERYOZH_PROXY_SERVER: endpoint proxy HTTP Anda, dengan format http://HOST:PORT.
CYBERYOZH_PROXY_USERNAME: nama pengguna proxy Anda.
CYBERYOZH_PROXY_PASSWORD: kata sandi proxy Anda.
Tanpa variabel server, skrip akan terhubung langsung. Playwright mendukung konfigurasi proxy untuk browser atau untuk satu konteks browser.
import json
import os
from datetime import datetime, timezone
from playwright.sync_api import sync_playwright, TimeoutError
URL = "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
FIELDS = {
"title": ".product_main h1",
"price": ".product_main .price_color",
"availability": ".product_main .availability",
}
options = {}
if server := os.getenv("CYBERYOZH_PROXY_SERVER"):
options["proxy"] = {
"server": server,
"username": os.getenv("CYBERYOZH_PROXY_USERNAME", ""),
"password": os.getenv("CYBERYOZH_PROXY_PASSWORD", ""),
}
with sync_playwright() as p:
browser = p.chromium.launch(**options)
try:
page = browser.new_page()
response = page.goto(URL, wait_until="domcontentloaded")
if response is None or not response.ok:
raise SystemExit("Page request failed; check the URL and connection.")
record = {}
for field, selector in FIELDS.items():
element = page.locator(selector)
try:
element.wait_for(state="visible", timeout=10000)
value = " ".join(element.inner_text().split())
except TimeoutError:
raise SystemExit(f"Required field missing or not ready: {field}")
if not value:
raise SystemExit(f"Required field is empty: {field}")
record[field] = value
record.update(
source_url=page.url,
collected_at=datetime.now(timezone.utc).isoformat(),
)
with open("product.json", "w", encoding="utf-8") as output:
json.dump(record, output, ensure_ascii=False, indent=2)
print("Saved product.json")
finally:
browser.close()Skrip menunggu setiap elemen wajib, menghapus spasi berlebih, dan mempertahankan mata uang yang ditampilkan. Kolom yang hilang atau kosong akan menghentikan proses dengan pesan yang jelas sebelum rekaman baru ditulis. Keluaran yang berhasil mencakup URL sumber dan waktu pengumpulan UTC; menjalankan ulang akan menimpa product.json.
Tips: Untuk pembahasan lebih lanjut tentang memilih kolom dan mengatur nilai hasil ekstraksi, baca panduan parsing data.
Jika Anda sudah mengonfigurasi Yozh Scraper, Python dapat memakai ulang preset tersimpan melalui REST API-nya:
Kirim ke POST /api/v1/scrape/preset/page dan simpan job_id yang dikembalikan.
Periksa GET /api/v1/scrape/{job_id} sampai selesai, dengan batas waktu keseluruhan dan penanganan untuk job yang gagal atau dibatalkan.
Ambil GET /api/v1/scrape/{job_id}/results, validasi kolom datanya, lalu simpan.
Otomatisasi screen scraping dengan crawler, jadwal, dan tools AI
Setelah ekstraksi halaman produk pertama berjalan, tantangan berikutnya adalah mengumpulkan data terbaru di seluruh katalog. Bangun otomatisasi di atas konfigurasi yang sudah teruji tersebut, dengan batasan penemuan halaman, proses terjadwal, dan pemeriksaan sebelum hasil disimpan.
Temukan halaman tambahan dengan Yozh Crawler
Yozh Crawler menemukan URL dan meneruskan halaman ke Yozh Scraper untuk diekstrak. Mulailah dari halaman kategori, batasi penemuan pada domain atau pola URL yang dituju, dan tetapkan batas maksimum jumlah halaman serta kedalaman.
Penanganan duplikat mencegah URL yang setara dikunjungi berulang kali, sedangkan pengaturan jeda permintaan mengontrol seberapa cepat halaman diambil. Mulailah dengan crawl kecil dan periksa cakupannya sebelum diperluas. Cara ini membantu menemukan halaman yang tidak relevan dan kategori produk yang terlewat sejak dini.
Jadwalkan pengumpulan dengan n8n
Hubungkan n8n ke endpoint Yozh REST API yang dapat dijangkau dan susun alur berikut:
Pemicu terjadwal → kirim job scraping → cek penyelesaian → validasi hasil → simpan data.
Gunakan Schedule Trigger n8n untuk menentukan interval dan node HTTP Request untuk mengirim job. Simpan ID job-nya, lalu gunakan perulangan tunggu-dan-periksa untuk memantau penyelesaian. Tambahkan batas waktu keseluruhan dan cabang kegagalan agar job yang gagal mendapat perhatian.
Sebelum menyimpan, periksa kolom wajib dan lampirkan waktu pengumpulan. Integrasi ini memakai API Yozh dan node standar n8n, dengan penjadwalan yang dikelola di n8n.
Tips: Untuk cara lain menjadwalkan pengumpulan berkala, lihat panduan otomatisasi web scraping.
Hubungkan asisten AI melalui MCP
Model Context Protocol (MCP) memungkinkan asisten AI yang kompatibel memanggil tool eksternal. Setelah menghubungkan asisten ke endpoint MCP Yozh, Anda bisa memintanya mengirim ekstraksi, memeriksa job, dan mengambil hasilnya.
Preset berbantuan AI opsional dapat membuat aturan ekstraksi dari deskripsi atau skema. Jika diaktifkan, perbaikan selektor dipicu saat kolom wajib mengembalikan nilai kosong. Validasi hasil perbaikan terhadap sumbernya, karena kolom yang terisi tetap bisa berisi nilai yang salah.
Konfigurasikan kredensial penyedia AI yang relevan dan perhitungkan biaya penggunaan saat mengaktifkan fitur-fitur ini.
Pilih pengaturan koneksi dan sesi untuk tugas Anda
Saat melakukan screen scraping pada situs web, pilih pengaturan koneksi berdasarkan lokasi yang Anda butuhkan, lama sesi, dan seberapa sering Anda mengunjungi ulang halaman. Opsi proxy CyberYozh cocok untuk berbagai kebutuhan:
Residensial rotating: Gunakan IP regional untuk mengumpulkan halaman produk atau listing yang berdiri sendiri. Untuk langkah yang saling berkaitan, pilih sesi sticky hingga 24 jam dan pertahankan konfigurasi sesi yang sama.
Akses 100 juta IP residensial asli.
Static ISP: Pilih IP tetap untuk kunjungan berulang atau tugas terautentikasi yang membutuhkan alamat jaringan yang konsisten.
Sewa proxy static ISP Anda dan gunakan satu alamat selama seluruh masa sewa.
Mobile LTE/4G/5G: Trafik tanpa batas mendukung pengumpulan data berkelanjutan lewat browser, asalkan pengujian memastikan koneksi operator seluler cocok untuk target. Trafik tanpa batas menggambarkan skema penagihan, bukan kecepatan koneksi.
Dapatkan proxy seluler Anda dengan IP bersih dan tanpa tambalan.
Datacenter: Pertimbangkan untuk sumber publik yang sesuai, di mana pengujian kecil memastikan akses dan ekstraksi berjalan.
Dapatkan proxy datacenter dedicated IPv4/IPv6 berkecepatan tinggi dengan uptime 99,99%.
Cookie browser, sesi login aplikasi, dan persistensi IP proxy memiliki fungsi yang berbeda. Cookie dapat menyimpan pengenal atau token autentikasi, sementara aplikasi yang menentukan apakah login Anda tetap valid. Persistensi proxy menjaga IP yang terlihat dari luar tetap konsisten. Mempertahankan IP tidak memperpanjang login yang sudah kedaluwarsa, dan mempertahankan cookie tidak mencegah perubahan IP.
Sebelum menjalankan job, IP Checker CyberYozh dapat membantu memeriksa reputasi dan sinyal lokasi. API-nya mendukung pengiriman pemeriksaan reputasi IP dan pengambilan laporannya. Gunakan temuan tersebut bersama permintaan uji kecil: setiap target menerapkan aturan aksesnya sendiri, sehingga laporan yang baik tidak menjamin respons target.
Masalah umum screen scraping dan cara mengatasinya
Saat sebuah proses menghasilkan rekaman yang tidak lengkap atau tidak konsisten, bandingkan tangkapan layar yang tersimpan dengan sampel keluaran dari job yang sama. Cara ini membantu membedakan masalah pemuatan halaman dari kesalahan ekstraksi atau pemformatan.
Masalah | Yang perlu diperiksa dan diperbaiki |
Kolom hilang | Tunggu konten yang diperlukan, verifikasi selektor terhadap halaman terkini, dan tandai kolom wajib yang kosong sebelum menyimpan. |
Harga salah | Pastikan mata uang, lokasi pengiriman, dan varian yang dipilih. Periksa pemisah desimal sebelum mengonversi harga menjadi angka. |
Konten halaman tidak terduga | Periksa status login, layar persetujuan, dan pengalihan. Pastikan pengaturan bahasa dan wilayah sesuai dengan tampilan yang dituju. |
Rekaman duplikat | Normalisasi URL yang setara dan gunakan pengenal produk yang stabil. Pertahankan perbedaan yang bermakna antara varian, wilayah, dan waktu pengumpulan. |
Rate limit berulang | Identifikasi layanan yang mengembalikan 429. Kurangi frekuensi permintaan dan konkurensi, patuhi Retry-After, dan batasi percobaan ulang dengan jeda yang makin panjang. |
Perubahan tata letak | Perbarui aturan ekstraksi atau gunakan perbaikan preset yang sudah dikonfigurasi, lalu verifikasi secara manual hasil revisinya terhadap halaman. |
Setelah mengubah preset Yozh, jalankan ulang sampel kecil sebelum memulai ulang seluruh pengumpulan. Untuk penanganan percobaan ulang secara mendetail, lihat 429 too many requests.
Apakah screen scraping legal?
Screen scraping bisa legal, tetapi legalitasnya bergantung pada sumber, metode akses, jenis data, yurisdiksi, dan tujuan penggunaan. Dapat melihat sebuah halaman tidak otomatis memberi izin untuk setiap bentuk pengumpulan atau penggunaan ulang.
Sebelum menjalankan job, periksa ketentuan kontraktual situs, pembatasan akses, serta izin atau lisensi yang dibutuhkan aktivitas Anda. Pertimbangkan hak cipta dan hak basis data jika berlaku, terutama jika Anda berencana menerbitkan ulang atau menjual materi yang dikumpulkan.
Kewajiban privasi juga tetap relevan. Regulator privasi internasional menegaskan bahwa informasi pribadi yang dapat diakses publik tetap bisa dilindungi oleh undang-undang perlindungan data.
Untuk contoh ini, batasi Yozh Scraper pada halaman latihan dan kolom produk yang dipilih. Untuk penggunaan produksi, dokumentasikan cakupan yang diizinkan, kumpulkan hanya data yang diperlukan, batasi akses ke rekaman yang tersimpan, dan tetapkan aturan retensi serta penghapusan. Sertakan HTML dan tangkapan layar yang tersimpan dalam kontrol tersebut, karena keduanya dapat memuat informasi tambahan.
