
Emma Foster
Machine Learning Engineer

Ekstraksi data pendaftaran perusahaan menjadi berguna untuk penelitian AI hanya ketika catatan tersebut terkini, dapat dilacak, dan dinormalkan di berbagai yurisdiksi. Arsitektur terbaik adalah API-first: lakukan query ke registri resmi, simpan respons sumber, peta bidang ke skema perusahaan bersama, dan gunakan otomatisasi browser hanya ketika tidak ada API atau ekspor yang sesuai. Tantangan CAPTCHA dapat mengganggu alur kerja portal publik, tetapi harus ditangani melalui lapisan pemulihan yang dapat diaudit dengan otorisasi ketat, batas laju, dan kontrol pengurangan data. Panduan ini menunjukkan cara membangun pipeline tersebut, termasuk pemilihan sumber, penyelesaian identitas, contoh Python terstruktur, penyimpanan bukti, pemantauan perubahan, dan integrasi CapSolver yang aman. Hasilnya mendukung onboarding pemasok, pemeriksaan pihak ketiga, pemantauan portofolio, dan agen penelitian tanpa memungkinkan model membuat penentuan hukum atau risiko yang tidak didukung.
Catatan yang berguna lebih dari sekadar nama perusahaan. Ia membutuhkan identifikasi yang cukup stabil dan asal usul untuk membedakan entitas dengan nama serupa serta menjelaskan setiap kesimpulan.
from dataclasses import dataclass, field
from datetime import datetime
@dataclass
class CompanyRecord:
jurisdiction: str
registry_company_id: str
legal_name: str
previous_names: list[str] = field(default_factory=list)
company_status: str | None = None
incorporation_date: str | None = None
legal_form: str | None = None
registered_address: dict | None = None
officers: list[dict] = field(default_factory=list)
filing_history: list[dict] = field(default_factory=list)
industry_codes: list[str] = field(default_factory=list)
source_url: str | None = None
collected_at: str = field(default_factory=lambda: datetime.utcnow().isoformat())
Bidang inti bervariasi tergantung yurisdiksi, tetapi catatan harus selalu menyimpan identifikasi perusahaan resmi, yurisdiksi sumber, URL sumber, dan timestamp pengumpulan. FAQ web-scraping CapSolver memberikan panduan umum untuk pengumpulan data publik yang andal, sementara blog otomatisasi CapSolver membahas desain alur kerja.
API resmi menawarkan skema yang stabil, lisensi yang jelas, dan batas laju yang dapat diprediksi. Misalnya, API UK Companies House menyediakan informasi perusahaan secara real-time, sementara API SEC EDGAR mengekspos data pelaporan dan pengajuan AS. Portal registri bisnis EU e-Justice menjelaskan akses lintas yurisdiksi melalui BRIS.
| Jalur sumber | Penggunaan terbaik | Keuntungan utama | Keterbatasan utama |
|---|---|---|---|
| API REST resmi | Verifikasi dan pemantauan berulang | Data terstruktur yang stabil | Otorisasi dan batas laju |
| Dataset bulk resmi | Analisis skala portofolio | Pemrosesan volume tinggi yang efisien | Mungkin tidak real-time |
| Portal registri publik | Pencarian satu kali atau bidang yang tidak didukung | Bukti sumber yang mudah dibaca | Kontrol sesi dan tantangan CAPTCHA |
| Penyedia lisensi | Cakupan multi-yurisdiksi | Skema yang dinormalkan | Biaya dan keterbatasan lisensi |
Workflow penelitian AI yang dapat dipertanggungjawabkan mencatat jalur sumber yang menghasilkan setiap bidang. Ia tidak pernah menyatukan nilai penyedia dengan catatan resmi tanpa asal usul.
Contoh berbasis API berikut menggunakan endpoint profil perusahaan Companies House yang telah didokumentasikan. Simpan kunci API di luar prompt dan kode sumber.
import os
import requests
COMPANIES_HOUSE_KEY = os.environ["COMPANIES_HOUSE_API_KEY"]
def fetch_uk_company(company_number: str) -> dict:
url = (
"https://api.company-information.service.gov.uk/"
f"company/{company_number}"
)
response = requests.get(
url,
auth=(COMPANIES_HOUSE_KEY, ""),
timeout=30,
headers={"Accept": "application/json"},
)
response.raise_for_status()
raw = response.json()
return {
"jurisdiction": "GB",
"registry_company_id": raw["company_number"],
"legal_name": raw["company_name"],
"company_status": raw.get("company_status"),
"incorporation_date": raw.get("date_of_creation"),
"legal_form": raw.get("type"),
"registered_address": raw.get("registered_office_address"),
"industry_codes": raw.get("sic_codes", []),
"source_url": url,
}
Gunakan endpoint yang telah didokumentasikan untuk pejabat, riwayat pelaporan, kebangkrutan, dan pihak dengan kontrol signifikan hanya ketika bidang tersebut diperlukan untuk kasus penggunaan yang disetujui. Jangan kumpulkan seluruh profil secara default. Panduan register Companies House menjelaskan register publik dan kebijakan pencarian.
Kata-kata registri berbeda. Satu sumber mungkin menggunakan "aktif", yang lain "terdaftar", dan yang lainnya label khusus yurisdiksi. Pertahankan nilai mentah dan peta ke kosakata yang dinormalkan.
STATUS_MAP = {
"active": "aktif",
"registered": "aktif",
"dissolved": "tidak aktif",
"liquidation": "kesulitan",
"administration": "kesulitan",
"converted-closed": "tidak aktif",
}
def normalize_status(raw_status: str | None) -> dict:
raw = (raw_status or "tidak diketahui").strip().lower()
return {
"raw_status": raw_status,
"normalized_status": STATUS_MAP.get(raw, "lainnya"),
}
Normalisasi tidak boleh menghilangkan label sumber. Agen AI membutuhkan bukti mentah untuk menjelaskan ketidakpastian dan menyesuaikan perubahan dalam terminologi registri.
Panduan web-scraping Python CapSolver menawarkan pola pengumpulan praktis, dan glosari CapSolver membantu tim menyamakan terminologi otomatisasi.
Nama saja tidak cukup andal. Selesaikan entitas dengan memperberat identifikasi yang stabil dan mengonfirmasi atribut.
from difflib import SequenceMatcher
def entity_match_score(query: dict, candidate: dict) -> float:
score = 0.0
if query.get("registry_company_id") == candidate.get("registry_company_id"):
score += 0.60
name_a = (query.get("legal_name") or "").lower()
name_b = (candidate.get("legal_name") or "").lower()
score += 0.25 * SequenceMatcher(None, name_a, name_b).ratio()
if query.get("postal_code") and (
query["postal_code"] == candidate.get("postal_code")
):
score += 0.15
return round(min(score, 1.0), 3)
Tuntut tinjauan manusia di bawah ambang batas kepercayaan yang konservatif. Agen AI harus merangkum bukti pencocokan, bukan menyatakan dua entitas identik hanya karena nama mereka mirip.
Beberapa registri hanya mengekspos bidang melalui portal publik atau menambahkan validasi lalu lintas setelah pencarian berulang. Gunakan otomatisasi browser hanya ketika ketentuan memungkinkan otomatisasi dan organisasi telah menyetujui alur kerja.
Dokumentasi Agen CapSolver yang disediakan pengguna memetakan solve_on_page ke metode browser inti. Langkah pemulihan Playwright yang dikendalikan dapat tetap berada di luar pemikiran bebas model:
from capsolver_core import Capsolver
cap = Capsolver(api_key=os.environ["CAPSOLVER_API_KEY"])
async def recover_authorized_registry_page(page):
detected = await cap.detect(page)
if not detected:
return {"solved": False, "reason": "Tidak ada tantangan yang didukung terdeteksi"}
result = await cap.solve_on_page(page)
return {
"solved": True,
"result": result,
}
Jaga browser tetap dalam sesi yang sama dan terapkan aturan retry yang terbatas. FAQ penyelesaian CAPTCHA CapSolver menjelaskan siklus umum, dan artikel CapSolver tentang penanganan CAPTCHA selama web-scraping membahas pola pemulihan praktis.
Kode Bonus: Gunakan kode WEBS di Dashboard CapSolver untuk mendapatkan bonus tambahan 5% pada setiap recharge.
Agen AI harus menerima paket bukti, bukan halaman mentah tanpa batas. Sertakan bidang yang dinormalkan, snapshot atau hash sumber, timestamp, dan peringatan kualitas data yang jelas.
import hashlib
import json
from datetime import datetime, timezone
def build_evidence_package(record: dict, raw_response: dict) -> dict:
raw_json = json.dumps(raw_response, sort_keys=True).encode("utf-8")
return {
"record": record,
"provenance": {
"source_url": record["source_url"],
"collected_at": datetime.now(timezone.utc).isoformat(),
"raw_sha256": hashlib.sha256(raw_json).hexdigest(),
},
"warnings": [
"Informasi registri mungkin diajukan oleh perusahaan dan mungkin memerlukan verifikasi independen.",
"Tidak ada kesimpulan hukum atau investasi yang boleh dibuat tanpa tinjauan manusia.",
],
}
Ini terutama penting karena publikasi fakta oleh registri tidak membuktikan bahwa fakta tersebut terkini, lengkap, atau diverifikasi secara independen. Output AI harus membedakan "dilaporkan oleh registri" dari "dikonfirmasi melalui due diligence".
Gunakan pemeriksaan berbasis peristiwa di mana webhook resmi atau produk streaming tersedia. Jika tidak, hitung hash dari bidang yang dinormalkan dan ambil ulang berdasarkan jadwal risiko.
MONITORING_INTERVALS = {
"high_risk_counterparty": "harian",
"active_vendor": "mingguan",
"prospect": "bulanan",
"archived_relationship": "kuartalan",
}
Lacak perubahan yang berarti seperti status perusahaan, kantor terdaftar, direktur, pelaporan kepemilikan manfaat, laporan yang terlambat, dan indikator kebangkrutan. Hindari menghasilkan notifikasi untuk perubahan format saja.
Ekstraksi data pendaftaran perusahaan harus menghormati lisensi sumber, ketentuan penggunaan, hukum privasi, dan batasan tujuan. Bahkan registri publik mungkin mengandung informasi pribadi tentang pejabat atau pemilik manfaat. Kumpulkan hanya apa yang diperlukan oleh proses due diligence yang disetujui, terapkan periode penyimpanan, dan batasi akses model downstream.
<Panduan prinsip perlindungan data UK ICO menyediakan kerangka kerja yang berguna untuk hukum, minimisasi, akurasi, pembatasan penyimpanan, dan keamanan.
Ekstraksi data pendaftaran perusahaan untuk due diligence AI bekerja paling baik sebagai pipeline yang berfokus pada asal usul. Gunakan API resmi dan dataset bulk sebanyak mungkin, normalisasi tanpa menghilangkan nilai mentah, selesaikan entitas secara konservatif, dan berikan model bukti daripada kesimpulan yang tidak terkendali. Ketika portal registri publik yang sah menampilkan tantangan CAPTCHA yang didukung, CapSolver dapat bertindak sebagai lapisan pemulihan yang sempit tanpa mengubah sisa pipeline.
Mulailah dengan menguji CapSolver dalam alur kerja staging, lalu tambahkan lisensi sumber, tinjauan privasi, batas laju, dan persetujuan manusia sebelum penggunaan produksi.
Tidak. Ketersediaannya bervariasi tergantung yurisdiksi, jenis catatan, dan kebijakan akses. Beberapa registri mempublikasikan detail dasar perusahaan tetapi membatasi informasi pribadi, kepemilikan manfaat, sejarah, atau data dokumen.
Gunakan API resmi atau dataset bulk terlebih dahulu. Otomatisasi browser harus menjadi cadangan untuk bidang yang diizinkan yang tidak tersedia melalui akses terstruktur.
Agen dapat merangkum bukti dan menandai ketidaksesuaian, tetapi keputusan hukum, kepatuhan, peminjaman, pengadaan, atau investasi yang material harus tetap tunduk pada aturan yang diverifikasi dan tinjauan manusia yang memenuhi syarat.
Gunakan jadwal berbasis risiko. Pihak ketiga berisiko tinggi mungkin memerlukan pemeriksaan harian, sementara hubungan berisiko rendah atau tidak aktif mungkin memerlukan pembaruan bulanan atau kuartalan.
CapSolver hanya relevan ketika portal publik yang sah menampilkan tantangan yang didukung. Ia tidak boleh menggantikan API resmi, izin, kontrol identitas, atau tinjauan kepatuhan.
Pelajari arsitektur pengambilan data web Rust yang dapat diskalakan dengan reqwest, scraper, pengambilan data asinkron, pengambilan data browser tanpa tampilan, rotasi proxy, dan penanganan CAPTCHA yang sesuai aturan.

Mengotomasi penyelesaian CAPTCHA dengan Nanobot dan CapSolver. Gunakan Playwright untuk menyelesaikan reCAPTCHA dan Cloudflare secara otomatis.
