
Adélia Cruz
Neural Network Developer

Scrapy-Playwright adalah middleware yang mengintegrasikan Scrapy, framework web scraping yang cepat dan kuat untuk Python, dengan Playwright, library otomatisasi browser. Kombinasi ini memungkinkan Scrapy untuk menangani situs web yang berat JavaScript dengan memanfaatkan kemampuan Playwright untuk merender konten dinamis, berinteraksi dengan halaman web, dan mengelola konteks browser dengan lancar.
Meskipun Scrapy sangat bagus untuk meng-scrape situs web statis, banyak situs web modern sangat bergantung pada JavaScript untuk merender konten secara dinamis. Spider Scrapy tradisional dapat kesulitan dengan situs-situs ini, sering kali kehilangan data penting atau gagal menavigasi struktur halaman yang kompleks. Scrapy-Playwright menjembatani kesenjangan ini dengan memungkinkan Scrapy untuk mengontrol browser headless, memastikan bahwa semua konten dinamis dimuat sepenuhnya dan dapat diakses untuk di-scrape.
Untuk memulai dengan Scrapy-Playwright, Anda perlu menginstal Scrapy dan Playwright. Berikut cara mengatur lingkungan Anda:
Instal Scrapy:
pip install scrapy
Instal Scrapy-Playwright:
pip install scrapy-playwright
Instal Browser Playwright:
Setelah menginstal Playwright, Anda perlu menginstal binary browser yang diperlukan.
playwright install
Pertama, buat proyek Scrapy baru jika Anda belum memilikinya:
scrapy startproject myproject
cd myproject
Selanjutnya, Anda perlu mengaktifkan Playwright di pengaturan proyek Scrapy Anda. Buka settings.py dan tambahkan konfigurasi berikut:
# settings.py
# Aktifkan middleware pengunduh Playwright
DOWNLOADER_MIDDLEWARES = {
'scrapy_playwright.middleware.ScrapyPlaywrightDownloadHandler': 543,
}
# Tentukan handler pengunduh untuk HTTP dan HTTPS
DOWNLOAD_HANDLERS = {
'http': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
'https': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
}
# Aktifkan pengaturan Playwright
TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'
# Pengaturan Playwright (opsional)
PLAYWRIGHT_BROWSER_TYPE = 'chromium' # Dapat berupa 'chromium', 'firefox', atau 'webkit'
PLAYWRIGHT_LAUNCH_OPTIONS = {
'headless': True,
}
Dengan pengaturan selesai, mari kita buat spider sederhana yang menggunakan Playwright untuk meng-scrape situs web yang dirender JavaScript. Untuk ilustrasi, kita akan meng-scrape situs hipotetis yang memuat konten secara dinamis.
Buat file spider baru dynamic_spider.py di dalam direktori spiders:
# spiders/dynamic_spider.py
import scrapy
from scrapy_playwright.page import PageCoroutine
class DynamicSpider(scrapy.Spider):
name = "dynamic"
start_urls = ["https://example.com/dynamic"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url,
meta={
"playwright": True,
"playwright_page_coroutines": [
PageCoroutine("wait_for_selector", "div.content"),
],
},
)
async def parse(self, response):
# Ekstrak data setelah JavaScript telah merender konten
for item in response.css("div.content"):
yield {
"title": item.css("h2::text").get(),
"description": item.css("p::text").get(),
}
# Tangani pagination atau interaksi tambahan jika diperlukan
Dalam contoh di atas:
playwright: True: Menginformasikan Scrapy untuk menggunakan Playwright untuk permintaan ini.playwright_page_coroutines: Menentukan tindakan yang akan dilakukan dengan Playwright. Di sini, ia menunggu selector div.content untuk memastikan bahwa konten dinamis telah dimuat sebelum di-parse.parse Asinkron: Memanfaatkan kemampuan asinkron untuk menangani respons secara efektif.Salah satu tantangan signifikan dalam scraping web adalah berurusan dengan captcha, yang dirancang untuk mencegah akses otomatis. CapSolver adalah solusi yang kuat yang menyediakan layanan pemecahan captcha, termasuk integrasi dengan alat otomatisasi browser seperti Playwright. Pada bagian ini, kita akan mengeksplorasi cara mengintegrasikan CapSolver dengan Scrapy-Playwright untuk menangani captcha dengan lancar.
CapSolver adalah layanan pemecahan captcha yang mengotomatiskan proses pemecahan berbagai jenis captcha, termasuk captcha dan reCAPTCHA. Dengan mengintegrasikan CapSolver dengan alur kerja scraping Anda, Anda dapat melewati tantangan captcha dan mempertahankan alur tugas scraping Anda tanpa intervensi manual.
Untuk mengintegrasikan CapSolver dengan Scrapy-Playwright, Anda perlu:
Berikut adalah panduan langkah demi langkah untuk mengintegrasikan CapSolver dengan Scrapy-Playwright, lengkap dengan kode contoh.
Pertama, unduh ekstensi browser CapSolver dan tempatkan di direktori proyek Anda. Asumsikan ekstensi terletak di CapSolver.Browser.Extension.
./assets/config.json di direktori ekstensi CapSolver.enabledForcaptcha ke true dan sesuaikan captchaMode ke token untuk pemecahan otomatis.Contoh config.json:
{
"enabledForcaptcha": true,
"captchaMode": "token"
// pengaturan lainnya tetap sama
}
Modifikasi settings.py Anda untuk mengonfigurasi Playwright untuk memuat ekstensi CapSolver. Anda perlu menentukan jalur ke ekstensi dan meneruskan argumen yang diperlukan ke Playwright.
# settings.py
import os
from pathlib import Path
# Pengaturan Playwright yang ada
PLAYWRIGHT_BROWSER_TYPE = 'chromium'
PLAYWRIGHT_LAUNCH_OPTIONS = {
'headless': False, # Harus False untuk memuat ekstensi
'args': [
'--disable-extensions-except={}'.format(os.path.abspath('CapSolver.Browser.Extension')),
'--load-extension={}'.format(os.path.abspath('CapSolver.Browser.Extension')),
],
}
# Pastikan bahwa reaktor Twisted diatur
TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'
Catatan: Memuat ekstensi browser mengharuskan browser untuk berjalan dalam mode non-headless. Oleh karena itu, atur 'headless': False.
Buat spider baru atau modifikasi yang sudah ada untuk berinteraksi dengan captcha menggunakan ekstensi CapSolver.
# spiders/captcha_spider.py
import scrapy
from scrapy_playwright.page import PageCoroutine
import asyncio
class CaptchaSpider(scrapy.Spider):
name = "captcha_spider"
start_urls = ["https://site.example/captcha-protected"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url,
meta={
"playwright": True,
"playwright_page_coroutines": [
PageCoroutine("wait_for_selector", "iframe[src*='captcha']"),
PageCoroutine("wait_for_timeout", 1000), # Tunggu ekstensi untuk memproses
],
"playwright_context": "default",
},
callback=self.parse_captcha
)
async def parse_captcha(self, response):
page = response.meta["playwright_page"]
# Temukan kotak centang captcha atau frame dan berinteraksi sesuai
try:
# Tunggu iframe captcha tersedia
await page.wait_for_selector("iframe[src*='captcha']", timeout=10000)
frames = page.frames
captcha_frame = None
for frame in frames:
if 'captcha' in frame.url:
captcha_frame = frame
break
if captcha_frame:
# Klik kotak centang captcha
await captcha_frame.click("div#checkbox")
# Tunggu captcha untuk dipecahkan oleh CapSolver
await page.wait_for_selector("div.captcha-success", timeout=60000) # Sesuaikan selector jika diperlukan
self.logger.info("Captcha dipecahkan dengan sukses.")
else:
self.logger.warning("Iframe captcha tidak ditemukan.")
except Exception as e:
self.logger.error(f"Kesalahan menangani captcha: {e}")
# Lanjutkan dengan parsing halaman setelah captcha dipecahkan
for item in response.css("div.content"):
yield {
"title": item.css("h2::text").get(),
"description": item.css("p::text").get(),
}
# Tangani pagination atau interaksi tambahan jika diperlukan
Pastikan semua dependensi diinstal dan jalankan spider Anda menggunakan:
scrapy crawl captcha_spider
Setelah Anda merasa nyaman dengan dasar-dasarnya, Scrapy-Playwright menawarkan beberapa fitur lanjutan untuk meningkatkan proyek scraping Anda.
Scraping beberapa halaman atau menavigasi melalui situs web dapat disederhanakan menggunakan kemampuan navigasi Playwright.
# spiders/multi_page_spider.py
import scrapy
from scrapy_playwright.page import PageCoroutine
class MultiPageSpider(scrapy.Spider):
name = "multipage"
start_urls = ["https://example.com/start"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url,
meta={
"playwright": True,
"playwright_page_coroutines": [
PageCoroutine("wait_for_selector", "div.list"),
PageCoroutine("evaluate", "window.scrollTo(0, document.body.scrollHeight)"),
],
},
)
async def parse(self, response):
# Ekstrak data dari halaman pertama
for item in response.css("div.list-item"):
yield {
"name": item.css("span.name::text").get(),
"price": item.css("span.price::text").get(),
}
# Navigasikan ke halaman berikutnya
next_page = response.css("a.next::attr(href)").get()
if next_page:
yield scrapy.Request(
response.urljoin(next_page),
callback=self.parse,
meta={
"playwright": True,
"playwright_page_coroutines": [
PageCoroutine("wait_for_selector", "div.list"),
],
},
)
Playwright memungkinkan pembuatan beberapa konteks browser, yang dapat berguna untuk menangani sesi, cookie, atau tugas scraping paralel.
# settings.py
PLAYWRIGHT_CONTEXTS = {
"default": {
"viewport": {"width": 1280, "height": 800},
"user_agent": "CustomUserAgent/1.0",
},
"mobile": {
"viewport": {"width": 375, "height": 667},
"user_agent": "MobileUserAgent/1.0",
"is_mobile": True,
},
}
Di spider Anda, tentukan konteks:
# spiders/context_spider.py
import scrapy
class ContextSpider(scrapy.Spider):
name = "context"
start_urls = ["https://example.com"]
def start_requests(self):
yield scrapy.Request(
self.start_urls[0],
meta={
"playwright": True,
"playwright_context": "mobile",
},
)
async def parse(self, response):
# Logika parsing Anda di sini
pass
Scrapy-Playwright dapat diintegrasikan dengan middleware lain untuk meningkatkan fungsionalitas, seperti menangani percobaan ulang, manajemen proxy, atau header khusus.
# settings.py
DOWNLOADER_MIDDLEWARES.update({
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
'scrapy_playwright.middleware.ScrapyPlaywrightDownloadHandler': 543,
})
# Contoh pengaturan header khusus
DEFAULT_REQUEST_HEADERS = {
'User-Agent': 'MyCustomAgent/1.0',
'Accept-Language': 'en-US,en;q=0.9',
}
Untuk memaksimalkan Scrapy-Playwright dan CapSolver, pertimbangkan praktik terbaik berikut:
Klaim Kode Bonus Anda untuk solusi captcha teratas di CapSolver: scrape. Setelah menukarnya, Anda akan mendapatkan bonus tambahan 5% setelah setiap isi ulang, tanpa batas.

Scrapy-Playwright adalah pengubah permainan untuk scraping web, menjembatani kesenjangan antara ekstraksi konten statis dan dinamis. Dengan memanfaatkan kekuatan framework Scrapy yang kuat dan otomatisasi browser Playwright yang canggih, Anda dapat menangani tugas scraping yang paling menantang dengan mudah. Lebih jauh lagi, mengintegrasikan CapSolver memungkinkan Anda untuk mengatasi tantangan captcha, memastikan pengumpulan data yang tidak terputus bahkan dari situs web yang paling terjaga.
Apakah Anda meng-scrape situs e-niaga, platform media sosial, atau situs web yang berat JavaScript, Scrapy-Playwright yang dikombinasikan dengan CapSolver menyediakan alat yang Anda butuhkan untuk berhasil. Dengan mengikuti praktik terbaik dan memanfaatkan integrasi yang kuat ini, Anda dapat membangun solusi scraping web yang efisien, andal, dan skalabel yang disesuaikan dengan kebutuhan khusus Anda.
Siap untuk meningkatkan proyek scraping Anda? Selami Scrapy-Playwright dan CapSolver, dan buka kemungkinan baru untuk pengumpulan data dan otomatisasi.
Pelajari apa yang memicu Kesalahan Cloudflare 1020 Akses Ditolak, bagaimana Firewall Aplikasi Web dan deteksi bot bekerja, dan bagaimana pengembang dapat mengurangi kesalahan positif dalam alur kerja otomatis yang sah.

Pelajari cara menggunakan template CapSolver n8n untuk memantau halaman produk yang dilindungi oleh AWS WAF, menyelesaikan tantangan, mengekstrak harga, membandingkan perubahan, dan memicu notifikasi secara otomatis.
