Skip to content

Scrapling: Library Web Scraping dengan Sistem Anti Bot

scrapling

Scrapling adalah library scraping adaptif pertama yang belajar dari perubahan situs web dan berkembang bersamanya. Ketika pustaka lain rusak saat situs web memperbarui strukturnya, Scrapling secara otomatis menemukan kembali elemen Anda dan menjaga scraper Anda tetap berjalan.

Dibangun untuk Web modern, Scrapling dilengkapi dengan mesin parsing cepat dan fetcher sendiri untuk menangani semua tantangan Web Scraping yang Anda hadapi atau akan hadapi. Dibangun oleh Web Scrapers untuk Web Scrapers dan pengguna biasa, ada sesuatu untuk semua orang.

from scrapling.fetchers import Fetcher, AsyncFetcher, StealthyFetcher, DynamicFetcher
StealthyFetcher.adaptive = True
# Ambil sumber situs web tanpa terdeteksi!
page = StealthyFetcher.fetch('https://example.com', headless=True, network_idle=True)
print(page.status)

Hasil: 200

products = page.css('.product', auto_save=True)  # Scrape data yang bertahan dari perubahan desain situs web!
# Nanti, jika struktur situs web berubah, berikan `adaptive=True`
products = page.css('.product', adaptive=True) # dan Scrapling masih menemukannya!

Fitur Library Scrapling

  • Permintaan HTTP: Permintaan HTTP yang cepat dan tersembunyi dengan kelas Fetcher. Dapat meniru fingerprint TLS, header browser, dan menggunakan HTTP3.
  • Pemuatan Dinamis: Mengambil situs web dinamis dengan otomatisasi browser penuh melalui kelas DynamicFetcher yang mendukung Chromium Playwright, Chrome asli, dan mode siluman kustom.
  • Bypass Anti-bot: Kemampuan siluman tingkat lanjut dengan StealthyFetcher menggunakan versi Firefox yang dimodifikasi dan spoofing fingerprint. Dapat dengan mudah melewati semua jenis Cloudflare Turnstile dan Interstitial dengan otomatisasi.
  • Manajemen Sesi: Dukungan sesi persisten dengan kelas FetcherSession, StealthySession, dan DynamicSession untuk manajemen cookie dan state di seluruh permintaan.
  • Dukungan Async: Dukungan async lengkap di semua fetcher dan kelas sesi async khusus.

Adaptive Scraping & Integrasi AI

  • Pelacakan Elemen Cerdas: Menemukan kembali elemen setelah perubahan situs web menggunakan algoritma kemiripan cerdas.
  • Pemilihan Fleksibel Cerdas: Selector CSS, selector XPath, pencarian berbasis filter, pencarian teks, pencarian regex, dan banyak lagi.
  • Temukan Elemen Serupa: Secara otomatis menemukan elemen yang mirip dengan elemen yang ditemukan.
  • Server MCP untuk Digunakan dengan AI: Server MCP bawaan untuk Web Scraping berbantuan AI dan ekstraksi data. Server MCP memiliki kemampuan kustom yang kuat yang memanfaatkan Scrapling untuk mengekstrak konten yang ditargetkan sebelum meneruskannya ke AI (Claude/Cursor/dll), sehingga mempercepat operasi dan mengurangi biaya dengan meminimalkan penggunaan token.

Arsitektur Berkinerja Tinggi & Battle-tested

  • Sangat Cepat: Performa yang dioptimalkan mengungguli sebagian besar pustaka scraping Python.
  • Efisiensi Memori: Struktur data yang dioptimalkan dan lazy loading untuk jejak memori minimal.
  • Serialisasi JSON Cepat: 10x lebih cepat daripada pustaka standar.
  • Battle-tested: Scrapling tidak hanya memiliki cakupan tes 92% dan cakupan type hint penuh, tetapi juga telah digunakan setiap hari oleh ratusan Web Scrapers selama setahun terakhir.

Pengalaman Ramah Pengembang/Web Scraper

  • Shell Web Scraping Interaktif: Shell IPython bawaan opsional dengan integrasi Scrapling, shortcut, dan alat baru untuk mempercepat pengembangan script Web Scraping, seperti mengonversi permintaan curl ke permintaan Scrapling dan melihat hasil permintaan di browser Anda.
  • Gunakan Langsung dari Terminal: Secara opsional, Anda dapat menggunakan Scrapling untuk scrape URL tanpa menulis kode apa pun!
  • API Navigasi Kaya: Penelusuran DOM tingkat lanjut dengan metode navigasi parent, sibling, dan child.
  • Pemrosesan Teks yang Ditingkatkan: Regex bawaan, metode pembersihan, dan operasi string yang dioptimalkan.
  • Pembuatan Selector Otomatis: Menghasilkan selector CSS/XPath yang kuat untuk elemen apa pun.
  • API yang Familiar: Mirip dengan Scrapy/BeautifulSoup dengan pseudo-element yang sama yang digunakan di Scrapy/Parsel.
  • Cakupan Tipe Lengkap: Type hint penuh untuk dukungan IDE yang sangat baik dan penyelesaian kode.
  • Gambar Docker Siap Pakai: Dengan setiap rilis, gambar Docker yang berisi semua browser secara otomatis dibuat dan didorong.

Cara Penggunaan

from scrapling.fetchers import Fetcher, StealthyFetcher, DynamicFetcher
from scrapling.fetchers import FetcherSession, StealthySession, DynamicSession

# Permintaan HTTP dengan dukungan sesi
with FetcherSession(impersonate='chrome') as session: # Gunakan versi terbaru fingerprint TLS Chrome
page = session.get('https://quotes.toscrape.com/', stealthy_headers=True)
quotes = page.css('.quote .text::text')

# Atau gunakan permintaan satu kali
page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote .text::text')

# Mode siluman tingkat lanjut (Biarkan browser terbuka sampai selesai)
with StealthySession(headless=True, solve_cloudflare=True) as session:
page = session.fetch('https://nopecha.com/demo/cloudflare', google_search=False)
data = page.css('#padded_content a')

# Atau gunakan gaya permintaan satu kali, ini membuka browser untuk permintaan ini, lalu menutupnya setelah selesai
page = StealthyFetcher.fetch('https://nopecha.com/demo/cloudflare')
data = page.css('#padded_content a')

# Otomatisasi browser penuh (Biarkan browser terbuka sampai selesai)
with DynamicSession(headless=True, disable_resources=False, network_idle=True) as session:
page = session.fetch('https://quotes.toscrape.com/', load_dom=False)
data = page.xpath('//span[@class="text"]/text()') # Selector XPath jika Anda lebih suka

# Atau gunakan gaya permintaan satu kali, ini membuka browser untuk permintaan ini, lalu menutupnya setelah selesai
page = DynamicFetcher.fetch('https://quotes.toscrape.com/')
data = page.css('.quote .text::text')

Parsing & Navigasi Tingkat Lanjut

from scrapling.fetchers import Fetcher

# Pemilihan dan navigasi elemen yang kaya
page = Fetcher.get('https://quotes.toscrape.com/')

# Dapatkan kutipan dengan beberapa metode pemilihan
quotes = page.css('.quote') # Selector CSS
quotes = page.xpath('//div[@class="quote"]') # XPath
quotes = page.find_all('div', {'class': 'quote'}) # Gaya BeautifulSoup
# Sama dengan
quotes = page.find_all('div', class_='quote')
quotes = page.find_all(['div'], class_='quote')
quotes = page.find_all(class_='quote') # dan seterusnya...
# Temukan elemen berdasarkan konten teks
quotes = page.find_by_text('quote', tag='div')

# Navigasi tingkat lanjut
first_quote = page.css_first('.quote')
quote_text = first_quote.css('.text::text')
quote_text = page.css('.quote').css_first('.text::text') # Selector berantai
quote_text = page.css_first('.quote .text').text # Menggunakan `css_first` lebih cepat daripada `css` jika Anda ingin elemen pertama
author = first_quote.next_sibling.css('.author::text')
parent_container = first_quote.parent

# Hubungan dan kemiripan elemen
similar_elements = first_quote.find_similar()
below_elements = first_quote.below_elements()

Anda dapat langsung menggunakan parser jika Anda tidak ingin mengambil situs web seperti di bawah ini:

from scrapling.parser import Selector

page = Selector("<html>...</html>")

Dan itu bekerja persis dengan cara yang sama!

Contoh Manajemen Sesi Async

import asyncio
from scrapling.fetchers import FetcherSession, AsyncStealthySession, AsyncDynamicSession

async with FetcherSession(http3=True) as session: # `FetcherSession` sadar konteks dan dapat bekerja dalam pola sync/async
page1 = session.get('https://quotes.toscrape.com/')
page2 = session.get('https://quotes.toscrape.com/', impersonate='firefox135')

# Penggunaan sesi async
async with AsyncStealthySession(max_pages=2) as session:
tasks = []
urls = ['https://example.com/page1', 'https://example.com/page2']

for url in urls:
task = session.fetch(url)
tasks.append(task)

print(session.get_pool_stats()) # Opsional - Status pool tab browser (sibuk/bebas/error)
results = await asyncio.gather(*tasks)
print(session.get_pool_stats())

CLI & Interactive Shell

Scrapling v0.3 menyertakan antarmuka baris perintah yang kuat:

# Luncurkan shell Web Scraping interaktif
scrapling shell

# Ekstrak halaman ke file secara langsung tanpa pemrograman (Mengekstrak konten di dalam tag `body` secara default)
# Jika file output berakhir dengan `.txt`, maka konten teks dari target akan diekstrak.
# Jika berakhir dengan `.md`, itu akan menjadi representasi markdown dari konten HTML, dan `.html` akan menjadi konten HTML secara langsung.
scrapling extract get 'https://example.com' content.md
scrapling extract get 'https://example.com' content.txt --css-selector '#fromSkipToProducts' --impersonate 'chrome' # Semua elemen yang cocok dengan selector CSS '#fromSkipToProducts'
scrapling extract fetch 'https://example.com' content.md --css-selector '#fromSkipToProducts' --no-headless
scrapling extract stealthy-fetch 'https://nopecha.com/demo/cloudflare' captchas.html --css-selector '#padded_content a' --solve-cloudflare

Catatan: Ada banyak fitur tambahan, tetapi saya ingin menjaga halaman ini tetap ringkas, seperti server MCP dan Interactive Web Scraping Shell. Lihat dokumentasi lengkap di sini.

Benchmark Performa

Scrapling tidak hanya kuat—ia juga sangat cepat, dan pembaruan sejak versi 0.3 telah memberikan peningkatan performa yang luar biasa di semua operasi.

Tes Kecepatan Ekstraksi Teks (5000 elemen bersarang)

#PustakaWaktu (ms)vs Scrapling
1Scrapling1.921.0x
2Parsel/Scrapy1.991.036x
3Raw Lxml2.331.214x
4PyQuery20.61~11x
5Selectolax80.65~42x
6BS4 dengan Lxml1283.21~698x
7MechanicalSoup1304.57~679x
8BS4 dengan html5lib3331.96~1735x

Kemiripan Elemen & Performa Pencarian Teks
Kemampuan pencarian elemen adaptif Scrapling secara signifikan mengungguli alternatif:

PustakaWaktu (ms)vs Scrapling
Scrapling1.871.0x
AutoScraper10.245.476x

Semua benchmark mewakili rata-rata dari 100+ run. Lihat benchmarks.py untuk metodologi.

Cara Install

Scrapling membutuhkan Python 3.10 atau lebih tinggi:

    pip install scrapling
  

Mulai dari v0.3.2, instalasi ini hanya menyertakan mesin parser dan dependensinya, tanpa fetcher atau dependensi commandline apa pun.

Dependensi Opsional

Jika Anda akan menggunakan salah satu fitur tambahan di bawah ini, fetcher, atau kelasnya, maka Anda perlu menginstal dependensi fetcher, lalu menginstal dependensi browser mereka dengan:

    pip install "scrapling[fetchers]"

scrapling install
  

Ini mengunduh semua browser dengan dependensi sistem dan dependensi manipulasi fingerprint mereka.

Fitur tambahan:

  • Instal fitur server MCP: pip install "scrapling[ai]"
  • Instal fitur shell (Web Scraping shell dan perintah extract): pip install "scrapling"
  • Instal semuanya: pip install "scrapling[all]"

Jangan lupa bahwa Anda perlu menginstal dependensi browser dengan scrapling install setelah salah satu extra ini (jika Anda belum melakukannya).

Docker

Anda juga dapat menginstal image Docker dengan semua extra dan browser dengan perintah berikut:

    docker pull pyd4vinci/scrapling
  

Image ini secara otomatis dibuat dan didorong ke Docker Hub melalui GitHub actions di sini.

Sumber: