CAPSOLVER
Blog
Cách giải quyết các thách thức Web Scraping với Scrapy và Playwright vào năm 2025

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

Logo of CapSolver

Adélia Cruz

Neural Network Developer

12-Nov-2024

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.

Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.

Thêm

Các User Agent Tốt Nhất để Scrape Web & Cách Sử Dụng Chúng
Các User Agent Tốt Nhất để Scrape Web & Cách Sử Dụng Chúng

Hướng dẫn về các user agent tốt nhất để scrape web và cách sử dụng hiệu quả để tránh bị phát hiện. Khám phá tầm quan trọng của user agent, các loại và cách triển khai chúng để scrape web liền mạch và không bị phát hiện.

Logo of CapSolver

Anh Tuan

07-Mar-2025

Cách giải quyết thử thách Cloudflare JS để thu thập dữ liệu web và tự động hóa
Cách giải quyết thử thách Cloudflare JS để thu thập dữ liệu web và tự động hóa

Tìm hiểu cách giải quyết thử thách JavaScript của Cloudflare để thu thập dữ liệu web và tự động hóa liền mạch. Khám phá các chiến lược hiệu quả, bao gồm sử dụng trình duyệt không đầu, luân phiên proxy, và tận dụng khả năng giải quyết CAPTCHA nâng cao của CapSolver.

Cloudflare
Logo of CapSolver

Anh Tuan

05-Mar-2025

Dấu vân tay TLS của Cloudflare: Nó là gì và cách giải quyết
Dấu vân tay TLS của Cloudflare: Nó là gì và cách giải quyết

Tìm hiểu về việc Cloudflare sử dụng dấu vân tay TLS để bảo mật, cách nó phát hiện và chặn bot, và khám phá các phương pháp hiệu quả để giải quyết vấn đề này cho các tác vụ thu thập dữ liệu web và duyệt web tự động.

Cloudflare
Logo of CapSolver

Anh Tuan

28-Feb-2025

Tại sao tôi cứ bị yêu cầu xác minh rằng tôi không phải là người máy?
Tại sao tôi cứ bị yêu cầu xác minh rằng tôi không phải là người máy?

Tìm hiểu lý do tại sao Google yêu cầu bạn xác minh rằng bạn không phải là robot và khám phá các giải pháp như sử dụng API của CapSolver để giải quyết các thử thách CAPTCHA một cách hiệu quả.

Logo of CapSolver

Anh Tuan

27-Feb-2025

Cách trích xuất dữ liệu từ trang web được bảo vệ bởi Cloudflare
Cách trích xuất dữ liệu từ trang web được bảo vệ bởi Cloudflare

Trong hướng dẫn này, chúng ta sẽ khám phá các kỹ thuật đạo đức và hiệu quả để trích xuất dữ liệu từ các trang web được bảo vệ bởi Cloudflare.

Cloudflare
Logo of CapSolver

Anh Tuan

20-Feb-2025

Tại sao các trang web lại nghĩ tôi là bot? Và cách giải quyết chúng
Tại sao các trang web lại nghĩ tôi là bot? Và cách giải quyết chúng

Hiểu tại sao các trang web đánh dấu bạn là bot và cách tránh bị phát hiện. Các tác nhân chính bao gồm các thử thách CAPTCHA, IP đáng ngờ và hành vi trình duyệt bất thường.

Logo of CapSolver

Anh Tuan

20-Feb-2025