Sản phẩmTích hợpTài nguyênTài liệuGiá cả
Bắt đầu ngay

© 2026 CapSolver. All rights reserved.

Liên hệ chúng tôi

Slack: lola@capsolver.com

Sản phẩm

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Tiện ích trình duyệt
  • Thêm nhiều loại CAPTCHA

Tích hợp

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Đối tác
  • Xem tất cả tích hợp

Tài nguyên

  • Chương trình giới thiệu
  • Tài liệu
  • Tham chiếu API
  • Blog
  • Câu hỏi thường gặp
  • Thuật ngữ
  • Trạng thái

Pháp lý

  • Điều khoản dịch vụ
  • Chính sách bảo mật
  • Chính sách hoàn tiền
  • Không bán thông tin cá nhân của tôi
Blog/All/Cách giải quyết các thách thức thu thập dữ liệu web với Scrapy và Playwright vào năm 2025
Nov11, 2024

Cách giải quyết các thách thức thu thập dữ liệu web với Scrapy và Playwright vào năm 2025

Adélia Cruz

Adélia Cruz

Neural Network Developer

Scrapy-Playwright là gì?

Scrapy-Playwright là một middleware tích hợp Scrapy, một framework web scraping mạnh mẽ và nhanh chóng cho Python, với Playwright, một thư viện tự động hóa trình duyệt. Sự kết hợp này cho phép Scrapy xử lý các trang web nặng JavaScript bằng cách tận dụng khả năng hiển thị nội dung động của Playwright, tương tác với các trang web và quản lý các ngữ cảnh trình duyệt một cách liền mạch.

Tại sao nên sử dụng Scrapy-Playwright?

Trong khi Scrapy rất phù hợp cho việc scraping các trang web tĩnh, nhiều trang web hiện đại phụ thuộc nhiều vào JavaScript để hiển thị nội dung một cách động. Các con nhện Scrapy truyền thống có thể gặp khó khăn với những trang web này, thường bỏ lỡ dữ liệu quan trọng hoặc không thể điều hướng các cấu trúc trang phức tạp. Scrapy-Playwright khắc phục khoảng cách này bằng cách cho phép Scrapy điều khiển một trình duyệt không đầu, đảm bảo rằng tất cả nội dung động được tải đầy đủ và có thể truy cập để scraping.

Lợi ích của việc sử dụng Scrapy-Playwright

  • Hiển thị JavaScript: Dễ dàng scraping các trang web tải nội dung một cách động bằng JavaScript.
  • Trình duyệt không đầu: Thực hiện các tác vụ scraping mà không cần trình duyệt hiển thị, tối ưu hóa hiệu suất.
  • Tương tác nâng cao: Xử lý các tương tác phức tạp như nhấp vào nút, điền biểu mẫu và điều hướng qua các trang.
  • Các hoạt động không đồng bộ: Lợi ích từ các khả năng không đồng bộ của Playwright để tăng tốc các tác vụ scraping.

Cài đặt

Để bắt đầu với Scrapy-Playwright, bạn cần cài đặt cả Scrapy và Playwright. Dưới đây là cách bạn có thể thiết lập môi trường của mình:

  1. Cài đặt Scrapy:

    bash Copy
    pip install scrapy
  2. Cài đặt Scrapy-Playwright:

    bash Copy
    pip install scrapy-playwright
  3. Cài đặt trình duyệt Playwright:

    Sau khi cài đặt Playwright, bạn cần cài đặt các binary trình duyệt cần thiết.

    bash Copy
    playwright install

Bắt đầu

Thiết lập một dự án Scrapy mới

Đầu tiên, tạo một dự án Scrapy mới nếu bạn chưa có:

bash Copy
scrapy startproject myproject
cd myproject

Cấu hình Playwright

Tiếp theo, bạn cần bật Playwright trong cài đặt của dự án Scrapy. Mở settings.py và thêm các cấu hình sau:

python Copy
# settings.py

# Bật middleware Playwright downloader
DOWNLOADER_MIDDLEWARES = {
    'scrapy_playwright.middleware.ScrapyPlaywrightDownloadHandler': 543,
}

# Chỉ định trình xử lý tải xuống cho HTTP và HTTPS
DOWNLOAD_HANDLERS = {
    'http': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
    'https': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
}

# Bật cài đặt Playwright
TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'

# Cài đặt Playwright (tùy chọn)
PLAYWRIGHT_BROWSER_TYPE = 'chromium'  # Có thể là 'chromium', 'firefox' hoặc 'webkit'
PLAYWRIGHT_LAUNCH_OPTIONS = {
    'headless': True,
}

Sử dụng cơ bản

Tạo một con nhện

Với việc thiết lập hoàn tất, hãy tạo một con nhện đơn giản sử dụng Playwright để scraping một trang web được hiển thị bằng JavaScript. Để minh họa, chúng ta sẽ scraping một trang web giả định tải nội dung một cách động.

Tạo một tệp con nhện mới dynamic_spider.py bên trong thư mục 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):
        # Trích xuất dữ liệu sau khi JavaScript đã hiển thị nội dung
        for item in response.css("div.content"):
            yield {
                "title": item.css("h2::text").get(),
                "description": item.css("p::text").get(),
            }

        # Xử lý phân trang hoặc các tương tác bổ sung nếu cần

Xử lý nội dung được hiển thị bằng JavaScript

Trong ví dụ trên:

  • playwright: True: Thông báo cho Scrapy sử dụng Playwright cho yêu cầu này.
  • playwright_page_coroutines: Chỉ định các hành động cần thực hiện với Playwright. Ở đây, nó chờ một bộ chọn div.content để đảm bảo nội dung động đã được tải trước khi phân tích cú pháp.
  • Phương thức parse không đồng bộ: Tận dụng các khả năng không đồng bộ để xử lý phản hồi hiệu quả.

Giải quyết Captcha với CapSolver

Một trong những thách thức đáng kể trong việc scraping web là xử lý captcha, được thiết kế để ngăn chặn truy cập tự động. CapSolver là một giải pháp mạnh mẽ cung cấp các dịch vụ giải quyết captcha, bao gồm cả tích hợp với các công cụ tự động hóa trình duyệt như Playwright. Trong phần này, chúng ta sẽ khám phá cách tích hợp CapSolver với Scrapy-Playwright để xử lý captcha một cách liền mạch.

CapSolver là gì?

CapSolver là một dịch vụ giải quyết captcha tự động hóa quá trình giải quyết các loại captcha khác nhau, bao gồm captcha và reCAPTCHA. Bằng cách tích hợp CapSolver với quy trình scraping của bạn, bạn có thể bỏ qua các thách thức captcha và duy trì dòng chảy của các tác vụ scraping mà không cần can thiệp thủ công.

Tích hợp CapSolver với Scrapy-Playwright

Để tích hợp CapSolver với Scrapy-Playwright, bạn cần:

  1. Nhận tiện ích mở rộng trình duyệt CapSolver: CapSolver cung cấp một tiện ích mở rộng trình duyệt tự động giải quyết captcha trong các ngữ cảnh trình duyệt.
  2. Cấu hình Playwright để tải tiện ích mở rộng CapSolver: Khi khởi chạy trình duyệt Playwright, hãy tải tiện ích mở rộng CapSolver để bật giải quyết captcha.
  3. Sửa đổi các yêu cầu Scrapy để sử dụng ngữ cảnh Playwright tùy chỉnh: Đảm bảo rằng các yêu cầu Scrapy của bạn sử dụng ngữ cảnh Playwright với tiện ích mở rộng CapSolver được tải.

Ví dụ triển khai bằng Python

Dưới đây là hướng dẫn từng bước để tích hợp CapSolver với Scrapy-Playwright, kèm theo ví dụ mã.

1. Nhận tiện ích mở rộng trình duyệt CapSolver

Đầu tiên, tải xuống tiện ích mở rộng trình duyệt CapSolver và đặt nó vào thư mục dự án của bạn. Giả sử tiện ích mở rộng nằm ở CapSolver.Browser.Extension.

2. Cấu hình tiện ích mở rộng:

  • Tìm tệp cấu hình ./assets/config.json trong thư mục tiện ích mở rộng CapSolver.
  • Đặt tùy chọn enabledForcaptcha thành true và điều chỉnh captchaMode thành token để giải quyết tự động.

Ví dụ config.json:

json Copy
{
  "enabledForcaptcha": true,
  "captchaMode": "token"
  // các cài đặt khác giữ nguyên
}

3. Cập nhật cài đặt Scrapy để tải tiện ích mở rộng

Sửa đổi settings.py của bạn để cấu hình Playwright tải tiện ích mở rộng CapSolver. Bạn cần chỉ định đường dẫn đến tiện ích mở rộng và chuyển các đối số cần thiết cho Playwright.

python Copy
# settings.py

import os
from pathlib import Path

# Cài đặt Playwright hiện có
PLAYWRIGHT_BROWSER_TYPE = 'chromium'
PLAYWRIGHT_LAUNCH_OPTIONS = {
    'headless': False,  # Phải là False để tải tiện ích mở rộng
    'args': [
        '--disable-extensions-except={}'.format(os.path.abspath('CapSolver.Browser.Extension')),
        '--load-extension={}'.format(os.path.abspath('CapSolver.Browser.Extension')),
    ],
}

# Đảm bảo rằng reactor Twisted được đặt
TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'

Lưu ý: Việc tải tiện ích mở rộng trình duyệt yêu cầu trình duyệt phải chạy ở chế độ không đầu. Do đó, đặt 'headless': False.

3. Tạo một con nhện xử lý Captcha

Tạo một con nhện mới hoặc sửa đổi một con nhện hiện có để tương tác với captcha bằng cách sử dụng tiện ích mở rộng 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),  # Chờ tiện ích mở rộng xử lý
                    ],
                    "playwright_context": "default",
                },
                callback=self.parse_captcha
            )

    async def parse_captcha(self, response):
        page = response.meta["playwright_page"]

        # Xác định vị trí hộp kiểm hoặc khung captcha và tương tác cho phù hợp
        try:
            # Chờ iframe captcha khả dụng
            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:
                # Nhấp vào hộp kiểm captcha
                await captcha_frame.click("div#checkbox")

                # Chờ captcha được giải quyết bởi CapSolver
                await page.wait_for_selector("div.captcha-success", timeout=60000)  # Điều chỉnh bộ chọn nếu cần

                self.logger.info("Captcha đã được giải quyết thành công.")
            else:
                self.logger.warning("Không tìm thấy iframe captcha.")
        except Exception as e:
            self.logger.error(f"Lỗi xử lý captcha: {e}")

        # Tiến hành phân tích cú pháp trang sau khi captcha được giải quyết
        for item in response.css("div.content"):
            yield {
                "title": item.css("h2::text").get(),
                "description": item.css("p::text").get(),
            }

        # Xử lý phân trang hoặc các tương tác bổ sung nếu cần

4. Chạy con nhện

Đảm bảo rằng tất cả các phụ thuộc được cài đặt và chạy con nhện của bạn bằng cách sử dụng:

bash Copy
scrapy crawl captcha_spider

Các tính năng nâng cao

Khi bạn đã quen với các chức năng cơ bản, Scrapy-Playwright cung cấp một số tính năng nâng cao để nâng cao các dự án scraping của bạn.

Xử lý nhiều trang

Scraping nhiều trang hoặc điều hướng qua một trang web có thể được hợp lý hóa bằng cách sử dụng các khả năng điều hướng của 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):
        # Trích xuất dữ liệu từ trang đầu tiên
        for item in response.css("div.list-item"):
            yield {
                "name": item.css("span.name::text").get(),
                "price": item.css("span.price::text").get(),
            }

        # Điều hướng đến trang tiếp theo
        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"),
                    ],
                },
            )

Sử dụng ngữ cảnh Playwright

Playwright cho phép tạo nhiều ngữ cảnh trình duyệt, có thể hữu ích để xử lý các phiên, cookie hoặc các tác vụ scraping song song.

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,
    },
}

Trong con nhện của bạn, chỉ định ngữ cảnh:

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):
        # Logic phân tích cú pháp của bạn ở đây
        pass

Tích hợp với Middleware

Scrapy-Playwright có thể được tích hợp với các middleware khác để nâng cao chức năng, chẳng hạn như xử lý thử lại, quản lý proxy hoặc tiêu đề tùy chỉnh.

python Copy
# settings.py

DOWNLOADER_MIDDLEWARES.update({
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
    'scrapy_playwright.middleware.ScrapyPlaywrightDownloadHandler': 543,
})

# Ví dụ về việc đặt tiêu đề tùy chỉnh
DEFAULT_REQUEST_HEADERS = {
    'User-Agent': 'MyCustomAgent/1.0',
    'Accept-Language': 'en-US,en;q=0.9',
}

Các thực tiễn tốt nhất

Để tận dụng tối đa Scrapy-Playwright và CapSolver, hãy xem xét các thực tiễn tốt nhất sau:

  1. Tối ưu hóa việc sử dụng Playwright: Chỉ sử dụng Playwright cho các yêu cầu yêu cầu hiển thị JavaScript để tiết kiệm tài nguyên.
  2. Quản lý ngữ cảnh trình duyệt: Tái sử dụng các ngữ cảnh trình duyệt nếu có thể để cải thiện hiệu suất và giảm thiểu chi phí.
  3. Xử lý thời gian chờ hiệu quả: Đặt thời gian chờ phù hợp và xử lý lỗi để quản lý các trang tải chậm.
  4. Tôn trọng Robots.txt và Điều khoản dịch vụ: Luôn đảm bảo các hoạt động scraping của bạn tuân thủ các chính sách của trang web đích.
  5. Triển khai điều tiết và độ trễ: Ngăn chặn việc quá tải máy chủ đích bằng cách triển khai các thực tiễn scraping lịch sự.
  6. Bảo mật khóa API CapSolver của bạn: Lưu trữ các thông tin nhạy cảm như khóa API một cách an toàn và tránh mã hóa cứng chúng trong các script của bạn.
  7. Theo dõi và ghi nhật ký hoạt động scraping: Theo dõi các hoạt động scraping của bạn để nhanh chóng xác định và giải quyết các vấn đề.

Mã bổ sung

Nhận Mã bổ sung của bạn cho các giải pháp captcha hàng đầu tại CapSolver: scrape. Sau khi đổi mã, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, không giới hạn lần.

CapSolver Bonus

Kết luận

Scrapy-Playwright là một công cụ thay đổi cuộc chơi cho việc scraping web, thu hẹp khoảng cách giữa việc trích xuất nội dung tĩnh và động. Bằng cách tận dụng sức mạnh của framework mạnh mẽ của Scrapy và tự động hóa trình duyệt tiên tiến của Playwright, bạn có thể giải quyết các tác vụ scraping khó khăn nhất một cách dễ dàng. Hơn nữa, tích hợp CapSolver cho phép bạn vượt qua các thách thức captcha, đảm bảo thu thập dữ liệu liên tục từ các trang web được bảo vệ nhất.

Cho dù bạn đang scraping các trang web thương mại điện tử, các nền tảng mạng xã hội hay bất kỳ trang web nặng JavaScript nào, Scrapy-Playwright kết hợp với CapSolver cung cấp các công cụ bạn cần để thành công. Bằng cách tuân theo các thực tiễn tốt nhất và tận dụng các tích hợp mạnh mẽ này, bạn có thể xây dựng các giải pháp scraping web hiệu quả, đáng tin cậy và có khả năng mở rộng phù hợp với nhu cầu cụ thể của bạn.

Bạn đã sẵn sàng nâng cao các dự án scraping của mình? Hãy thử Scrapy-Playwright và CapSolver, và mở khóa những khả năng mới cho việc thu thập dữ liệu và tự động hóa.

Xem thêm

Apr 30, 2026

Lỗi 1020 của Cloudflare: Truy cập bị từ chối trong trích xuất dữ liệu web & Bảo vệ WAF

Hãy học cách xác định nguyên nhân gây ra lỗi Cloudflare 1020 Truy cập Bị Từ Chối, cách Tường lửa Ứng dụng Web và phát hiện bot hoạt động, và cách các nhà phát triển giảm thiểu kết quả dương tính giả trong các quy trình tự động hợp lệ.

Anh Tuan
Anh Tuan
Apr 29, 2026

Theo dõi Giá Sản Phẩm Được Bảo Vệ Bằng AWS WAF Trong n8n Với CapSolver

Học cách sử dụng mẫu CapSolver n8n để theo dõi các trang sản phẩm được bảo vệ bởi AWS WAF, giải quyết các thách thức, trích xuất giá cả, so sánh các thay đổi và kích hoạt cảnh báo tự động.

Anh Tuan

Nội dung

Anh Tuan
Apr 29, 2026

Các tác nhân AI trong SEO: Từ nghiên cứu từ khóa đến thu thập dữ liệu tự động

Học cách các tác nhân AI trong SEO tự động hóa nghiên cứu từ khóa, phân tích đối thủ cạnh tranh và thu thập dữ liệu – và cách xử lý các thách thức CAPTCHA trong quy trình của bạn với CapSolver.

Anh Tuan
Anh Tuan
Apr 29, 2026

Tài liệu API Giải quyết CAPTCHA cho Nhà phát triển: Hướng dẫn năm 2026

Nâng cao kỹ năng giải CAPTCHA với tài liệu API toàn diện dành cho nhà phát triển của chúng tôi. Học cách tích hợp CapSolver để xử lý reCAPTCHA, AWS WAF và nhiều hơn nữa.

Anh Tuan
Anh Tuan