CAPSOLVER
Blog
Cara Mengatasi Tantangan Web Scraping dengan Scrapy dan Playwright di 2025

Cara Mengatasi Tantangan Web Scraping dengan Scrapy dan Playwright di 2025

Logo of CapSolver

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:

  1. Instal Scrapy:

    bash Copy
    pip install scrapy
  2. Instal Scrapy-Playwright:

    bash Copy
    pip install scrapy-playwright
  3. Instal Browser Playwright:

    Setelah menginstal Playwright, Anda perlu menginstal binary browser yang diperlukan.

    bash Copy
    playwright install

Memulai

Menyiapkan Proyek Scrapy Baru

Pertama, buat proyek Scrapy baru jika Anda belum memilikinya:

bash Copy
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 Copy
# 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 Copy
# 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 selector div.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:

  1. Dapatkan Ekstensi Browser CapSolver: CapSolver menyediakan ekstensi browser yang mengotomatiskan pemecahan captcha di dalam konteks browser.
  2. Konfigurasikan Playwright untuk Memuat Ekstensi CapSolver: Saat meluncurkan browser Playwright, muat ekstensi CapSolver untuk mengaktifkan pemecahan captcha.
  3. 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 ke true dan sesuaikan captchaMode ke token untuk pemecahan otomatis.

Contoh config.json:

json Copy
{
  "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 Copy
# 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 Copy
# 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 Copy
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 Copy
# 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 Copy
# 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 Copy
# 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 Copy
# 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:

  1. Optimalkan Penggunaan Playwright: Hanya gunakan Playwright untuk permintaan yang membutuhkan rendering JavaScript untuk menghemat sumber daya.
  2. Kelola Konteks Browser: Gunakan kembali konteks browser jika memungkinkan untuk meningkatkan kinerja dan mengurangi overhead.
  3. Tangani Timeout dengan Anggun: Atur timeout dan penanganan kesalahan yang sesuai untuk mengelola halaman yang lambat dimuat.
  4. Hormati Robots.txt dan Ketentuan Layanan: Selalu pastikan aktivitas scraping Anda mematuhi kebijakan situs web target.
  5. Terapkan Throttling dan Penundaan: Hindari membebani server target dengan menerapkan praktik scraping yang sopan.
  6. Amankan Kunci API CapSolver Anda: Simpan informasi sensitif seperti kunci API dengan aman dan hindari memasukkannya secara langsung dalam skrip Anda.
  7. 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.

CapSolver Bonus

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
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%+

Logo of CapSolver

Anh Tuan

23-Jan-2025

Apakah Web Scraping Legal? Panduan Lengkap untuk 2025
Apakah Web Scraping Legal? Panduan Komprehensif untuk 2025

Tantangan Hukum Web Scraping 2025: Regulasi Kunci, Kepatuhan, dan Studi Kasus

Logo of CapSolver

Ethan Collins

23-Jan-2025

5 Solver Captcha Terbaik untuk Pengenalan reCAPTCHA di 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

Logo of CapSolver

Rajinder Singh

23-Jan-2025

Cara Mengerjakan CAPTCHA Cloudflare Turnstile dengan Ekstensi
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.

Logo of CapSolver

Sora Fujimoto

23-Jan-2025

Apa itu Kunci Situs reCAPTCHA dan Bagaimana Cara Menemukannya?
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.

Logo of CapSolver

Rajinder Singh

23-Jan-2025

Cara Membypass Tantangan Cloudflare Saat Web Scraping di 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.

Logo of CapSolver

Nikolai Smirnov

23-Jan-2025