Extract Bloomberg articles using keyword search or category browsing with deep pagination, regional filters, and high-speed API-based scraping. no browser and no login required
Dokumen ini merangkum semua perubahan arsitektur dan strategi bypass yang telah diimplementasikan pada bloomberg-news-search untuk menghadapi sistem keamanan PerimeterX (HUMAN Security).
1. Implementasi "Primer Fetch" (Pemanasan IP)
Masalah Sebelumnya: Permintaan langsung ke Endpoint API JSON (nemo-next/api/search/query) dengan IP baru (atau IP tanpa cookie riwayat) langsung memicu blokade (HTTP 403) oleh sistem ant-bot PerimeterX. Bloomberg mengharuskan pengunjung untuk mendarat di halaman HTML terlebih dahulu.
Solusi:
Menambahkan Request HTML dasar (Primer Fetch) ke https://www.bloomberg.com/search sebelum mengeksekusi request ke API.
Dengan cara ini, server Bloomberg akan merespons dengan Header dan Set-Cookie dasar (seperti bdfpc), sehingga saat permintaan API dilakukan pada TCP Connection Pool yang sama, API merespons dengan kode 200 (Sukses).
Primer Fetch ini dipanggil secara otomatis pada:
Pengikisan Halaman 1.
Kapan pun Actor me-rotate Proxy ke IP baru karena IP lama terbakar/diblokir pada halaman tertentu.
2. Dynamic Session Proxy Rotation (Ganti IP Paksa)
Masalah Sebelumnya: Saat IP Residensial Apify dipertahankan (IP Stickiness) untuk seluruh script, IP tersebut pada akhirnya akan terkena batas rate limit atau blokir (biasanya pada halaman ke-5 hingga ke-8). Setelah diblokir, sisa pencarian akan terus-terusan mengembalikan 403.
Solusi:
Membiarkan IP konstan untuk mencoba hemat masa pakai IP.
Menambahkan Retry Logic cerdas di dalam fungsi _fetch() di mana apabila terjadi respons HTTP 403, sistem akan:
Menutup koneksi ScraplingFetcher yang telah dinodai.
Menyuntikkan ID Session acak (session-12345...) ke dalam string groups-RESIDENTIAL Apify Proxy secara on-the-fly.
Hal ini secara instan membunuh IP lama dan memaksa server Apify mencarikan IP perumahan (Residential IP) yang 100% baru.
Lakukan kembali Primer Fetch pada IP baru tersebut sebelum menyentuh API.
3. Isolasi Environment Fetcher (ScraplingFetcher)
Masalah Sebelumnya:httpx (di balik Scrapling) menyimpan cookies dan TCP Connection dalam satu sesi abadi. Jika suatu koneksi di-cap sebagai "Bot" oleh PerimeterX, maka status tersebut membekas di fetcher.
Solusi:
Jika Actor terdeteksi dan dirotasi, obyek ScraplingFetcher di re-instansiasi sepenuhnya (fetcher = ScraplingFetcher()), me-resetstate Browser/TLS Impersonation, mematikan Keep-Alive lama, serta menghapus seluruh jejak cookies beracun.
4. Randomisasi Profil Peramban (TLS Impersonate)
Profil user-agent / fingerprint bawaan Scrapling/curl_cffi diacak di tiap putaran menggunakan array konfigurasi ["safari2601", "safari260"] yang secara konstan merotasi bagaimana "bentuk" browser kita di hadapan pengecekan PerimeterX.
Catatan Penting Mengenai Batasan (Bottleneck)
Seperti yang ditunjukkan oleh script pengujian lokal tes.py yang mengeksekusi cookies PerimeterX valid secara manual namun tetap diblokir; sistem API nemo-next menyortir visitor dengan sangat ketat (bahkan mengekspektasi verifikasi Javascript sensor).
Pencapaian 30 - 63 Artikel per kata kunci secara murni menggunakan Request HTTP "buta" ini adalah kemenangan absolut atas kelemahan celah IP Trust (memanfaatkan reputasi IP perumahan Apify). PerimeterX umumnya akan memutus nafas scraping ini saat mendeteksi anomali penarikan API berantai dari session yang tidak mengeksekusi Javascript, sehingga proses yang berhenti di kisaran page 4 - 8 adalah wajar (Hard Limit API).