Cara Mengatasi Tantangan Web Scraping dengan Scrapy dan Playwright di 2025

Adélia Cruz
Neural Network Developer
12-Nov-2024

Apa itu Scrapy-Playwright?
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.
Mengapa Menggunakan Scrapy-Playwright?
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.
Manfaat Menggunakan Scrapy-Playwright
- Rendering JavaScript: Dengan mudah meng-scrape situs web yang memuat konten secara dinamis menggunakan JavaScript.
- Penjelajahan Headless: Lakukan tugas scraping tanpa browser yang terlihat, mengoptimalkan kinerja.
- Interaksi Lanjutan: Tangani interaksi kompleks seperti mengklik tombol, mengisi formulir, dan menavigasi melalui halaman.
- Operasi Asinkron: Manfaatkan kemampuan asinkron Playwright untuk mempercepat tugas scraping.
Instalasi
Untuk memulai dengan Scrapy-Playwright, Anda perlu menginstal Scrapy dan Playwright. Berikut cara mengatur lingkungan Anda:
-
Instal Scrapy:
bashpip install scrapy
-
Instal Scrapy-Playwright:
bashpip install scrapy-playwright
-
Instal Browser Playwright:
Setelah menginstal Playwright, Anda perlu menginstal binary browser yang diperlukan.
bashplaywright install
Memulai
Menyiapkan Proyek Scrapy Baru
Pertama, buat proyek Scrapy baru jika Anda belum memilikinya:
bash
scrapy startproject myproject
cd myproject
Mengonfigurasi Playwright
Selanjutnya, Anda perlu mengaktifkan Playwright di pengaturan proyek Scrapy Anda. Buka settings.py
dan tambahkan konfigurasi berikut:
python
# 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,
}
Penggunaan Dasar
Membuat Spider
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
:
python
# 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
Menangani Konten yang Dirender JavaScript
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 selectordiv.content
untuk memastikan bahwa konten dinamis telah dimuat sebelum di-parse.- Metode
parse
Asinkron: Memanfaatkan kemampuan asinkron untuk menangani respons secara efektif.
Memecahkan Captcha dengan CapSolver
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.
Apa itu CapSolver?
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.
Mengintegrasikan CapSolver dengan Scrapy-Playwright
Untuk mengintegrasikan CapSolver dengan Scrapy-Playwright, Anda perlu:
- Dapatkan Ekstensi Browser CapSolver: CapSolver menyediakan ekstensi browser yang mengotomatiskan pemecahan captcha di dalam konteks browser.
- Konfigurasikan Playwright untuk Memuat Ekstensi CapSolver: Saat meluncurkan browser Playwright, muat ekstensi CapSolver untuk mengaktifkan pemecahan captcha.
- Modifikasi Permintaan Scrapy untuk Menggunakan Konteks Playwright yang Dikustomisasi: Pastikan bahwa permintaan Scrapy Anda memanfaatkan konteks Playwright dengan ekstensi CapSolver yang dimuat.
Contoh Implementasi dalam Python
Berikut adalah panduan langkah demi langkah untuk mengintegrasikan CapSolver dengan Scrapy-Playwright, lengkap dengan kode contoh.
1. Dapatkan Ekstensi Browser CapSolver
Pertama, unduh ekstensi browser CapSolver dan tempatkan di direktori proyek Anda. Asumsikan ekstensi terletak di CapSolver.Browser.Extension
.
2. Konfigurasikan Ekstensi:
- Temukan file konfigurasi
./assets/config.json
di direktori ekstensi CapSolver. - Atur opsi
enabledForcaptcha
ketrue
dan sesuaikancaptchaMode
ketoken
untuk pemecahan otomatis.
Contoh config.json
:
json
{
"enabledForcaptcha": true,
"captchaMode": "token"
// pengaturan lainnya tetap sama
}
3. Perbarui Pengaturan Scrapy untuk Memuat Ekstensi
Modifikasi settings.py
Anda untuk mengonfigurasi Playwright untuk memuat ekstensi CapSolver. Anda perlu menentukan jalur ke ekstensi dan meneruskan argumen yang diperlukan ke Playwright.
python
# 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
.
3. Buat Spider yang Menangani Captcha
Buat spider baru atau modifikasi yang sudah ada untuk berinteraksi dengan captcha menggunakan ekstensi CapSolver.
python
# 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
4. Menjalankan Spider
Pastikan semua dependensi diinstal dan jalankan spider Anda menggunakan:
bash
scrapy crawl captcha_spider
Fitur Lanjutan
Setelah Anda merasa nyaman dengan dasar-dasarnya, Scrapy-Playwright menawarkan beberapa fitur lanjutan untuk meningkatkan proyek scraping Anda.
Menangani Beberapa Halaman
Scraping beberapa halaman atau menavigasi melalui situs web dapat disederhanakan menggunakan kemampuan navigasi Playwright.
python
# 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"),
],
},
)
Menggunakan Konteks Playwright
Playwright memungkinkan pembuatan beberapa konteks browser, yang dapat berguna untuk menangani sesi, cookie, atau tugas scraping paralel.
python
# 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:
python
# 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
Mengintegrasikan dengan Middleware
Scrapy-Playwright dapat diintegrasikan dengan middleware lain untuk meningkatkan fungsionalitas, seperti menangani percobaan ulang, manajemen proxy, atau header khusus.
python
# 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',
}
Praktik Terbaik
Untuk memaksimalkan Scrapy-Playwright dan CapSolver, pertimbangkan praktik terbaik berikut:
- Optimalkan Penggunaan Playwright: Hanya gunakan Playwright untuk permintaan yang membutuhkan rendering JavaScript untuk menghemat sumber daya.
- Kelola Konteks Browser: Gunakan kembali konteks browser jika memungkinkan untuk meningkatkan kinerja dan mengurangi overhead.
- Tangani Timeout dengan Anggun: Atur timeout dan penanganan kesalahan yang sesuai untuk mengelola halaman yang lambat dimuat.
- Hormati Robots.txt dan Ketentuan Layanan: Selalu pastikan aktivitas scraping Anda mematuhi kebijakan situs web target.
- Terapkan Throttling dan Penundaan: Hindari membebani server target dengan menerapkan praktik scraping yang sopan.
- Amankan Kunci API CapSolver Anda: Simpan informasi sensitif seperti kunci API dengan aman dan hindari memasukkannya secara langsung dalam skrip Anda.
- Pantau dan Catat Aktivitas Scraping: Lacak operasi scraping Anda untuk dengan cepat mengidentifikasi dan menyelesaikan masalah.
Kode Bonus
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.

Kesimpulan
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.
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

Apa Itu Pengenalan reCAPTCHA? Panduan untuk Pemula
Kesulitan dengan grid gambar reCAPTCHA? Temukan bagaimana pengenalan berbasis AI Capsolver menyelesaikan tantangan 'Pilih semua' secara instan. Pelajari integrasi API, ekstensi browser, dan kiat profesional untuk mengotomatiskan pemecahan CAPTCHA dengan akurasi 95%+

Anh Tuan
23-Jan-2025

Apakah Web Scraping Legal? Panduan Komprehensif untuk 2025
Tantangan Hukum Web Scraping 2025: Regulasi Kunci, Kepatuhan, dan Studi Kasus

Ethan Collins
23-Jan-2025

5 Solver Captcha Terbaik untuk Pengenalan reCAPTCHA di 2025
Jelajahi 5 pemecah CAPTCHA terbaik tahun 2025, termasuk CapSolver berbasis AI untuk pengenalan reCAPTCHA cepat. Bandingkan kecepatan, harga, dan akurasi di sini

Rajinder Singh
23-Jan-2025

Cara Mengerjakan CAPTCHA Cloudflare Turnstile dengan Ekstensi
Pelajari cara melewati CAPTCHA Cloudflare Turnstile dengan ekstensi Capsolver. Panduan instalasi untuk Chrome, Firefox, dan alat otomatisasi seperti Puppeteer.

Sora Fujimoto
23-Jan-2025

Apa itu Site Key reCAPTCHA dan Bagaimana Cara Menemukannya?
Pelajari cara menemukan Site Key reCAPTCHA secara manual atau dengan alat seperti Capsolver. Perbaiki masalah umum dan otomatisasi penyelesaian CAPTCHA untuk pengembang dan web scraping.

Rajinder Singh
23-Jan-2025

Cara Membypass Tantangan Cloudflare Saat Web Scraping di 2025
Pelajari cara melewati Cloudflare Challenge dan Turnstile di tahun 2025 untuk web scraping yang lancar. Temukan integrasi Capsolver, tips sidik jari TLS, dan perbaikan untuk kesalahan umum untuk menghindari CAPTCHA yang merepotkan. Hemat waktu dan skala ekstraksi data Anda.

Nikolai Smirnov
23-Jan-2025