GLM-5.3 Pengambilan Data Web: Bangun Pipeline Ekstraksi yang Handal dengan Penanganan CAPTCHA

Aloísio Vítor
How to use CapSolver
29-Sep-2026
TL;DR
- Gunakan GLM-5.3 setelah akses dan rendering, bukan sebagai pengganti lapisan browser. Model harus menerima teks halaman yang diizinkan, screenshot, atau catatan yang dinormalkan hanya setelah aplikasi mengklasifikasikan respons.
- Pisahkan akses, penanganan tantangan, ekstraksi, dan validasi. Ini memungkinkan perbedaan antara hasil kosong dan halaman login, batas kecepatan, shell JavaScript, atau checkpoint CAPTCHA.
- Gunakan CapSolver hanya untuk tugas verifikasi yang didukung dalam alur kerja yang diizinkan. Pertahankan sesi browser, URL situs, parameter tugas, anggaran ulang, dan validasi halaman akhir di bawah kendali aplikasi.
- Haruskan output yang terstruktur dari GLM-5.3 dan validasi di kode. Respons JSON yang sintaksisnya valid masih bisa berisi nilai yang hilang, duplikat, atau tidak didukung.
- Simpan bukti dengan setiap catatan. URL sumber, waktu ekstraksi, hash konten, dan status validasi membuat alur kerja AI dan data di downstream lebih mudah diaudit.
Pengantar: Di mana GLM-5.3 cocok dalam pipeline pengambilan data web
Model bahasa besar dapat mengubah konten web yang tidak konsisten menjadi catatan yang berguna, tetapi tidak menghilangkan pekerjaan operasional yang diperlukan untuk mendapatkan data halaman yang dapat dipercaya. Pipeline produksi masih membutuhkan pemeriksaan izin, batas permintaan, eksekusi browser ketika JavaScript diperlukan, penanganan eksplisit untuk checkpoint verifikasi, dan validasi deterministik sebelum catatan mencapai basis data.
GLM-5.3 berguna di lapisan interpretasi. Alur kerja yang kompatibel dengan API-nya dapat mengklasifikasikan konten yang dirender, memetakan teks ke skema, menjelaskan mengapa suatu bidang hilang, dan membantu menormalkan perbedaan antara halaman. Untuk otomasi yang diizinkan yang menemui tugas verifikasi yang didukung, CapSolver dapat ditempatkan sebelum ekstraksi sementara aplikasi mempertahankan kendali sesi halaman dan memverifikasi hasil akhir.
Panduan ini menyajikan arsitektur umum bukan instruksi untuk situs web tertentu. Gunakan hanya untuk data publik atau lainnya yang diizinkan dan hentikan ketika alur kerja mencapai login, pembayaran, data pribadi, atau batas izin di luar cakupan yang disetujui.
Arsitektur yang andal: akses dulu, model kemudian
Sistem pengambilan data web GLM-5.3 yang kuat menggunakan urutan tahapan kecil. Setiap tahapan menghasilkan hasil bertipe yang dapat diverifikasi oleh tahapan berikutnya.
| Tahapan | Tanggung Jawab | Output yang Diharapkan | Kondisi Berhenti |
|---|---|---|---|
| Pintu Persetujuan | Periksa target, cakupan data, kecepatan, dan tujuan | Definisi pekerjaan yang disetujui | Cakupan tidak diizinkan |
| Lapisan Akses | Unduh atau render halaman | Status, header, URL akhir, HTML atau screenshot | Login, pembayaran, data pribadi, atau akses ditolak |
| Klasifikator Respons | Identifikasi konten, shell kosong, batas kecepatan, atau halaman verifikasi | Nama status halaman | Status tidak dikenal atau tidak didukung |
| Adapter Verifikasi | Kirim satu tugas yang didokumentasikan ketika diizinkan | Siap, sedang diproses, atau kesalahan terminal | Batas waktu atau anggaran percobaan tercapai |
| Ekstraksi GLM | Ubah konten yang diizinkan menjadi skema yang ketat | Catatan JSON kandidat | Output tidak valid atau tidak didukung oleh bukti |
| Validasi Deterministik | Periksa tipe, bidang yang diperlukan, duplikat, dan bukti sumber | Catatan yang diterima atau penolakan eksplisit | Aturan bisnis apa pun gagal |
| Penyimpanan | Lakukan tulisan idempoten | ID catatan yang stabil dan tautan jejak | Kunci sumber sudah ada tanpa versi baru |
Batasan yang paling penting adalah antara akses dan interpretasi. Jika model menerima HTML halaman tantangan, mungkin akan dengan percaya diri menggambarkan halaman tersebut sebagai konten target. Klaskan respons sebelum memicu model.
Prasyarat
Contoh orkestrasi menggunakan Python 3.11 atau lebih baru dan paket requests. Simpan kredensial di variabel lingkungan dan jangan pernah sertakan mereka dalam kode sumber, prompt, log, screenshot, atau konfigurasi yang dikirimkan.
bash
python -m venv .venv
source .venv/bin/activate
pip install requests
export ZAI_API_KEY="ganti-dengan-kunci-z-ai-anda"
export CAPSOLVER_API_KEY="ganti-dengan-kunci-capsolver-anda"
Dokumentasi API Z.ai resmi menggunakan endpoint chat-completions di https://api.z.ai/api/paas/v4/chat/completions. Konfirmasikan identifikasi model saat ini di repositori GLM-5 atau konsol Z.ai sebelum deployment; panduan ini menggunakan glm-5.3-flash sebagai default yang dikonfigurasi lingkungan.
Langkah 1: Menentukan kontrak ekstraksi yang ketat
Jangan minta model untuk "ekstrak semua yang penting." Tetapkan bidang, perilaku null yang diizinkan, dan persyaratan bukti sebelum mengumpulkan halaman.
python
from dataclasses import dataclass
from datetime import datetime, timezone
from typing import Any
@dataclass(frozen=True)
class ExtractionJob:
source_url: str
allowed_host: str
required_fields: tuple[str, ...]
max_input_chars: int = 40_000
def validate_record(job: ExtractionJob, record: dict[str, Any]) -> dict[str, Any]:
missing = [name for name in job.required_fields if not record.get(name)]
if missing:
raise ValueError(f"missing_required_fields:{','.join(missing)}")
if record.get("source_url") != job.source_url:
raise ValueError("source_url_mismatch")
record["validated_at"] = datetime.now(timezone.utc).isoformat()
return record
Model hanya diizinkan mengembalikan null ketika skema secara eksplisit memungkinkannya. Nilai yang diperlukan harus diverifikasi terhadap bukti halaman oleh kode biasa.
Langkah 2: Mengklasifikasikan halaman sebelum mengirimkannya ke GLM-5.3
Lapisan akses harus mengembalikan objek kecil berstatus daripada hanya string HTML. Klasifikator dapat menggunakan kode status, URL akhir, tipe konten, selektor yang diharapkan, dan tanda checkpoint yang diketahui.
python
from enum import Enum
class PageState(str, Enum):
CONTENT = "content"
JAVASCRIPT_REQUIRED = "javascript_required"
RATE_LIMITED = "rate_limited"
LOGIN_REQUIRED = "login_required"
VERIFICATION = "verification"
UNKNOWN = "unknown"
def choose_action(state: PageState) -> str:
return {
PageState.CONTENT: "extract",
PageState.JAVASCRIPT_REQUIRED: "render_in_authorized_browser",
PageState.RATE_LIMITED: "back_off",
PageState.LOGIN_REQUIRED: "stop_for_operator",
PageState.VERIFICATION: "evaluate_supported_task",
PageState.UNKNOWN: "stop_for_review",
}[state]
HTTP 403 dan HTTP 429 tidak boleh masuk ke loop ulang umum. Permintaan yang ditolak memerlukan tinjauan izin dan konfigurasi. Permintaan yang dibatasi kecepatan memerlukan pengurangan konkurensi global dan menghormati jendela ulang yang disediakan server.
Langkah 3: Menangani verifikasi dengan batas
API resmi CapSolver menggunakan createTask untuk mengirim tugas yang didokumentasikan. Tugas asinkron diperiksa dengan getTaskResult. Aplikasi harus memilih jenis tugas dari dokumentasi tugas saat ini dan hanya melewatkan bidang yang diperlukan untuk checkpoint yang diizinkan.
python
import os
import time
import requests
CAPSOLVER_BASE = "https://api.capsolver.com"
def solve_supported_task(task: dict, *, timeout_seconds: int = 45) -> dict:
api_key = os.environ["CAPSOLVER_API_KEY"]
created = requests.post(
f"{CAPSOLVER_BASE}/createTask",
json={"clientKey": api_key, "task": task},
timeout=15,
).json()
if created.get("errorId") != 0:
raise RuntimeError(created.get("errorCode", "create_task_failed"))
if created.get("status") == "ready":
return created["solution"]
task_id = created.get("taskId")
if not task_id:
raise RuntimeError("missing_task_id")
deadline = time.monotonic() + timeout_seconds
while time.monotonic() < deadline:
time.sleep(3)
result = requests.post(
f"{CAPSOLVER_BASE}/getTaskResult",
json={"clientKey": api_key, "taskId": task_id},
timeout=15,
).json()
if result.get("errorId") != 0:
raise RuntimeError(result.get("errorCode", "task_failed"))
if result.get("status") == "ready":
return result["solution"]
if result.get("status") not in {"idle", "processing"}:
raise RuntimeError("unexpected_task_status")
raise TimeoutError("verification_task_deadline_exceeded")
Panggilan harus mengizinkan satu upaya terbatas secara default. Solusi yang dikembalikan harus diterapkan melalui jalur integrasi yang didokumentasikan dalam konteks browser yang sama yang mendeteksi checkpoint. Jika halaman tidak berpindah ke status yang diharapkan, kembalikan kegagalan atau minta tinjauan manusia.
Klaim Kode Bonus CapSolver Anda
Tingkatkan anggaran otomasi Anda secara instan!
Gunakan kode bonus CAP26 saat menambahkan dana ke akun CapSolver Anda untuk mendapatkan tambahan 5% bonus pada setiap penyetoran — tanpa batas.
Klaim sekarang di Dashboard CapSolver Anda
Langkah 4: Mengirim konten yang dinormalkan ke GLM-5.3
Setelah halaman dikonfirmasi sebagai konten, hapus kebisingan navigasi, skrip, elemen tersembunyi, banner berulang, dan chrome halaman yang tidak relevan. Pertahankan judul, label, tabel, dan referensi sumber. Jangan kirim cookie browser, header otorisasi, data pribadi, atau jejak sesi mentah ke model.
python
import json
import os
import requests
ZAI_ENDPOINT = "https://api.z.ai/api/paas/v4/chat/completions"
def extract_with_glm(job: ExtractionJob, normalized_text: str) -> dict:
prompt = {
"source_url": job.source_url,
"required_fields": list(job.required_fields),
"rules": [
"Kembalikan satu objek JSON dan tidak ada prosa.",
"Gunakan hanya bukti yang ada di page_text.",
"Jangan infer nilai yang diperlukan hilang.",
"Sertakan source_url tepat seperti yang diberikan.",
],
"page_text": normalized_text[: job.max_input_chars],
}
response = requests.post(
ZAI_ENDPOINT,
headers={
"Authorization": f"Bearer {os.environ['ZAI_API_KEY']}",
"Content-Type": "application/json",
},
json={
"model": os.getenv("GLM_MODEL", "glm-5.3-flash"),
"messages": [
{"role": "system", "content": "Ekstrak data yang didukung bukti."},
{"role": "user", "content": json.dumps(prompt, ensure_ascii=False)},
],
"temperature": 0,
},
timeout=60,
)
response.raise_for_status()
content = response.json()["choices"][0]["message"]["content"]
return json.loads(content)
Anggap contoh sebagai batas adapter. Konfirmasikan opsi permintaan saat ini dan fitur output yang terstruktur di dokumentasi Z.ai resmi sebelum penggunaan produksi. Jika model membungkus JSON dalam Markdown atau mengembalikan teks di luar kontrak, tolak respons daripada mencoba memperbaikinya secara diam-diam.
Langkah 5: Memvalidasi hasil browser dan catatan yang diekstraksi
Dua validasi berbeda diperlukan.
Pertama, validasi hasil browser. Konfirmasikan bahwa URL akhir, judul yang diharapkan, kontainer target, dan ketidakhadiran kesalahan baru sesuai dengan alur kerja yang diinginkan. Respons tugas yang sukses saja bukan bukti bahwa halaman terus berjalan.
Kedua, validasi catatan yang diekstraksi. Periksa string yang diperlukan, rentang numerik, tanggal, URL yang dinormalkan, kunci duplikat, dan potongan bukti. Untuk bidang yang berdampak tinggi, bandingkan nilai dengan selektor deterministik atau representasi kedua dari halaman.
python
def run_extraction(job: ExtractionJob, state: PageState, page_text: str) -> dict:
action = choose_action(state)
if action != "extract":
raise RuntimeError(f"page_not_ready_for_model:{action}")
candidate = extract_with_glm(job, page_text)
return validate_record(job, candidate)
Pintu akhir ini mencegah halaman tantangan, hallucinasi model, atau render parsial memasuki dataset sebagai pengambilan data yang sukses.
Observabilitas dan kontrol biaya
Catat ID jejak, URL sumber, URL akhir, status halaman, hash konten, nama model, versi prompt, versi skema, hasil validasi, dan waktu pemrosesan. Simpan ID tugas dan kode kesalahan untuk debugging operasional sementara, tetapi jangan simpan token solusi, rahasia, atau data sesi yang tidak relevan.
Terapkan satu anggaran untuk seluruh pekerjaan. Hitung percobaan HTTP, navigasi browser, percobaan verifikasi, panggilan GLM, karakter input, dan waktu yang berlalu. Ketika anggaran habis, kembalikan kegagalan bertipe daripada memungkinkan komponen satu untuk memulai ulang alur kerja.
Kumpulan metrik yang berguna termasuk:
- persentase halaman yang diklasifikasikan sebagai konten nyata sebelum menggunakan model;
- tingkat validasi skema;
- tingkat catatan duplikat dan kosong;
- biaya browser dan model per catatan yang diterima;
- jumlah tinjauan manusia berdasarkan alasan berhenti;
- keberhasilan end-to-end yang dikonfirmasi oleh bukti halaman akhir.
Mode kegagalan umum
| Gejala | Penyebab kemungkinan | Tindakan yang benar |
|---|---|---|
| GLM mengembalikan detail tentang halaman verifikasi | Respons tidak diklasifikasikan sebelum memicu | Hentikan panggilan model dan perbaiki deteksi status halaman |
| JSON diuraikan tetapi bidang yang diperlukan kosong | Prompt atau bukti sumber tidak lengkap | Tolak catatan dan periksa konten yang dinormalkan |
| Tugas siap tetapi halaman tetap terblokir | Konteks browser atau parameter tugas tidak sesuai | Bandingkan URL, sesi, user agent, waktu, dan persyaratan yang didokumentasikan |
| Biaya meningkat sementara catatan yang diterima tetap datar | Ekspansi browser atau model terlalu luas | Tambahkan filter deterministik dan anggaran per pekerjaan |
| Baris duplikat muncul setelah ulang | Penyimpanan tidak idempoten | Upsert berdasarkan kunci sumber yang stabil dan versi konten |
| HTTP 429 berulang | Konkurensi dikendalikan per pekerja, bukan secara global | Tambahkan anggaran kecepatan bersama dan hormati panduan ulang |
Kesimpulan
GLM-5.3 dapat membuat ekstraksi data web lebih fleksibel, tetapi keandalan berasal dari sistem di sekitarnya. Pertahankan kendali akses, rendering, klasifikasi status halaman, penanganan verifikasi, validasi skema, dan penyimpanan sebagai tahapan eksplisit. Gunakan model hanya setelah aplikasi memastikan bahwa itu melihat konten yang diinginkan.
Untuk alur kerja browser yang diizinkan dengan tugas verifikasi yang didukung, CapSolver dapat memberikan batas tugas yang didokumentasikan. Aplikasi tetap bertanggung jawab atas izin, kelanjutan sesi, ulang terbatas, penanganan rahasia, dan bukti bahwa alur kerja asli selesai.
Sumber dan bacaan lanjutan
- Repositori resmi GLM-5.3 dan GLM-5.3-Flash
- Contoh Z.ai MCP dan API chat-completions
- API createTask CapSolver
- API getTaskResult CapSolver
Pertanyaan Umum
Q: Apakah GLM-5.3 dapat menggantikan browser dalam web scraping?
Tidak. Ia dapat memahami teks, tangkapan layar, atau catatan yang dinormalkan, tetapi browser atau klien HTTP tetap mengelola navigasi, rendering, state, izin, dan verifikasi hasil akhir.
Q: Apakah HTML mentah sebaiknya dikirim langsung ke GLM-5.3?
Biasanya tidak. Klasifikasikan respons terlebih dahulu, hapus skrip dan kebisingan tata letak yang berulang, pertahankan label dan struktur yang berarti, dan batasi input hanya pada data yang diperlukan oleh skema ekstraksi.
Q: Kapan alur kerja harus memanggil CapSolver?
Hanya setelah mendeteksi tugas yang didukung dalam alur kerja yang diizinkan. Gunakan jenis tugas yang saat ini didokumentasikan, pertahankan konteks browser yang diperlukan, tetapkan tenggat waktu, dan verifikasi bahwa halaman benar-benar dilanjutkan.
Q: Apakah JSON yang valid berarti catatan yang diekstraksi benar?
Tidak. Sintaks JSON tidak membuktikan akurasi fakta. Bidang yang diperlukan, tipe, URL, tanggal, rentang numerik, duplikat, dan bukti sumber masih harus diperiksa dalam kode.
Q: Apa yang harus dilakukan jika state halaman tidak diketahui?
Berhenti dan minta tinjauan. Jangan kirim konten yang tidak diketahui ke model atau coba ulang melalui langkah browser dan verifikasi tambahan.
Q: Apakah desain ini dapat digunakan untuk data pribadi atau terbatas?
Desain ini tidak menciptakan izin. Gunakan hanya untuk data publik atau data yang diizinkan lainnya, minimalisir informasi yang dikumpulkan, dan patuhi ketentuan, kontrak, dan hukum yang berlaku.
Pernyataan Kepatuhan: Informasi yang diberikan di blog ini hanya untuk tujuan informasi. CapSolver berkomitmen untuk mematuhi semua hukum dan peraturan yang berlaku. Penggunaan jaringan CapSolver untuk kegiatan ilegal, penipuan, atau penyalahgunaan sangat dilarang dan akan diselidiki. Solusi penyelesaian captcha kami meningkatkan pengalaman pengguna sambil memastikan kepatuhan 100% dalam membantu menyelesaikan kesulitan captcha selama pengambilan data publik. Kami mendorong penggunaan layanan kami secara bertanggung jawab. Untuk informasi lebih lanjut, silakan kunjungi Syarat Layanan dan Kebijakan Privasi.
Lebih lanjut

Cara Mengembalikan Hasil Alat CAPTCHA yang Dapat Digunakan Agen AI
Baca hasil alat CAPTCHA dengan benar: bedakan kesalahan transport, tugas yang masih tertunda, keluaran solver, dan keberhasilan browser sebelum membiarkan agen AI melanjutkan.

Anh Tuan
30-Oct-2026

Cara Mencocokkan Hasil CAPTCHA dengan Tugas Agen Peramban Paralel
Jaga agar agen browser paralel tidak mencampur hasil CAPTCHA. Petakan ID tugas ke pemilik halaman, tolak respons yang sudah kedaluwarsa, dan uji perutean sebelum menerapkan solusi.

Nikolai Smirnov
29-Oct-2026

Cara Memilih Antara CAPTCHA API dan MCP untuk Agen AI
Pilih API CAPTCHA atau MCP untuk agen AI Anda dengan membandingkan kontrol tugas, penemuan alat, penanganan hasil, dan tanggung jawab browser sebelum Anda melakukan integrasi.

Emma Foster
29-Oct-2026

Cara Memperbaiki Panggilan CAPTCHA MCP yang Menggunakan Sesi Peramban yang Salah
Mendiagnosis panggilan MCP CAPTCHA yang membuka sesi browser berbeda. Periksa input alat, pertahankan halaman asli, dan verifikasi tugas sebelum melanjutkan.

Emma Foster
28-Oct-2026

Cara Mengatur Alat MCP CAPTCHA Solver di Qwen Code
Hubungkan alat MCP pemecah CAPTCHA ke Qwen Code, setujui server proyek, verifikasi koneksinya, dan pilih token atau alur kerja browser yang tepat untuk tugas Anda.

Nikolai Smirnov
26-Oct-2026

Cara Menambahkan Alat Deteksi CAPTCHA ke Haystack Agents
Tambahkan alat inspeksi CAPTCHA ke Haystack, baca parameter reCAPTCHA dengan SDK resmi, dan verifikasi koneksi sebelum langkah penyelesaian terpisah.

Rajinder Singh
22-Oct-2026


