Como Resolver Desafios de Web Scraping com Scrapy e Playwright em 2025

Emma Foster
Machine Learning Engineer
12-Nov-2024

O que ¨¦ Scrapy-Playwright?
Scrapy-Playwright ¨¦ um middleware que integra o Scrapy, um framework r¨¢pido e poderoso de web scraping para Python, com o Playwright, uma biblioteca de automa??o de navegador. Essa combina??o permite que o Scrapy manipule sites com JavaScript pesado, aproveitando a capacidade do Playwright de renderizar conte¨²do din?mico, interagir com p¨¢ginas da web e gerenciar contextos de navegador perfeitamente.
Por que usar Scrapy-Playwright?
Embora o Scrapy seja excelente para raspar sites est¨¢ticos, muitos sites modernos dependem fortemente do JavaScript para renderizar conte¨²do dinamicamente. Os spiders tradicionais do Scrapy podem ter dificuldades com esses sites, muitas vezes perdendo dados importantes ou falhando em navegar por estruturas de p¨¢gina complexas. O Scrapy-Playwright preenche essa lacuna, permitindo que o Scrapy controle um navegador sem cabe?a, garantindo que todo o conte¨²do din?mico seja totalmente carregado e acess¨ªvel para scraping.
Benef¨ªcios de usar Scrapy-Playwright
- Renderiza??o de JavaScript: Raspe facilmente sites que carregam conte¨²do dinamicamente usando JavaScript.
- Navega??o sem Cabe?a: Execute tarefas de scraping sem um navegador vis¨ªvel, otimizando o desempenho.
- Intera??es Avan?adas: Manipule intera??es complexas, como clicar em bot?es, preencher formul¨¢rios e navegar pelas p¨¢ginas.
- Opera??es Ass¨ªncronas: Beneficie-se das capacidades ass¨ªncronas do Playwright para acelerar as tarefas de scraping.
Instala??o
Para come?ar a usar o Scrapy-Playwright, voc¨º precisa instalar o Scrapy e o Playwright. Veja como configurar seu ambiente:
-
Instale o Scrapy:
bashpip install scrapy
-
Instale o Scrapy-Playwright:
bashpip install scrapy-playwright
-
Instale os navegadores Playwright:
Ap¨®s instalar o Playwright, voc¨º precisa instalar os bin¨¢rios do navegador necess¨¢rios.
bashplaywright install
Come?ando
Configurando um novo projeto Scrapy
Primeiro, crie um novo projeto Scrapy se voc¨º ainda n?o o fez:
bash
scrapy startproject myproject
cd myproject
Configurando o Playwright
Em seguida, voc¨º precisa habilitar o Playwright nas configura??es do seu projeto Scrapy. Abra settings.py
e adicione as seguintes configura??es:
python
# settings.py
# Habilite o middleware de download Playwright
DOWNLOADER_MIDDLEWARES = {
'scrapy_playwright.middleware.ScrapyPlaywrightDownloadHandler': 543,
}
# Especifique o manipulador de download para HTTP e HTTPS
DOWNLOAD_HANDLERS = {
'http': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
'https': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
}
# Habilite as configura??es do Playwright
TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'
# Configura??es do Playwright (opcional)
PLAYWRIGHT_BROWSER_TYPE = 'chromium' # Pode ser 'chromium', 'firefox' ou 'webkit'
PLAYWRIGHT_LAUNCH_OPTIONS = {
'headless': True,
}
Uso b¨¢sico
Criando um Spider
Com a configura??o conclu¨ªda, vamos criar um spider simples que usa o Playwright para raspar um site renderizado por JavaScript. Para ilustra??o, vamos raspar um site hipot¨¦tico que carrega conte¨²do dinamicamente.
Crie um novo arquivo de spider dynamic_spider.py
dentro do diret¨®rio 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):
# Extraia dados depois que o JavaScript renderizou o conte¨²do
for item in response.css("div.content"):
yield {
"title": item.css("h2::text").get(),
"description": item.css("p::text").get(),
}
# Lidar com pagina??o ou intera??es adicionais, se necess¨¢rio
Manipulando conte¨²do renderizado por JavaScript
No exemplo acima:
playwright: True
: Informa ao Scrapy para usar o Playwright para essa solicita??o.playwright_page_coroutines
: Especifica a??es para executar com o Playwright. Aqui, ele espera por um seletordiv.content
para garantir que o conte¨²do din?mico tenha sido carregado antes de analisar.- M¨¦todo
parse
ass¨ªncrono: Aproveita as capacidades ass¨ªncronas para lidar com a resposta de forma eficaz.
Resolvendo captchas com CapSolver
Um dos desafios significativos no web scraping ¨¦ lidar com captchas, que s?o projetados para evitar acesso automatizado. O CapSolver ¨¦ uma solu??o robusta que fornece servi?os de resolu??o de captcha, incluindo integra??es com ferramentas de automa??o de navegador, como Playwright. Nesta se??o, exploraremos como integrar o CapSolver com o Scrapy-Playwright para lidar com captchas perfeitamente.
O que ¨¦ CapSolver?
O CapSolver ¨¦ um servi?o de resolu??o de captcha que automatiza o processo de resolu??o de v¨¢rios tipos de captchas, incluindo captcha e reCAPTCHA. Ao integrar o CapSolver em seu fluxo de trabalho de scraping, voc¨º pode ignorar desafios de captcha e manter o fluxo de suas tarefas de scraping sem interven??o manual.
Integrando o CapSolver com o Scrapy-Playwright
Para integrar o CapSolver com o Scrapy-Playwright, voc¨º precisar¨¢:
- Obter a extens?o do navegador CapSolver: O CapSolver fornece uma extens?o de navegador que automatiza a resolu??o de captcha dentro de contextos de navegador.
- Configurar o Playwright para carregar a extens?o CapSolver: Ao iniciar o navegador Playwright, carregue a extens?o CapSolver para habilitar a resolu??o de captcha.
- Modificar solicita??es Scrapy para usar o contexto Playwright personalizado: Certifique-se de que suas solicita??es Scrapy utilizem o contexto Playwright com a extens?o CapSolver carregada.
Exemplo de implementa??o em Python
Abaixo, h¨¢ um guia passo a passo para integrar o CapSolver com o Scrapy-Playwright, completo com c¨®digo de exemplo.
1. Obter a extens?o do navegador CapSolver
Primeiro, baixe a extens?o do navegador CapSolver e coloque-a no diret¨®rio do seu projeto. Suponha que a extens?o esteja localizada em CapSolver.Browser.Extension
.
2. Configure a extens?o:
- Localize o arquivo de configura??o
./assets/config.json
no diret¨®rio da extens?o CapSolver. - Defina a op??o
enabledForcaptcha
comotrue
e ajuste ocaptchaMode
paratoken
para resolu??o autom¨¢tica.
Exemplo config.json
:
json
{
"enabledForcaptcha": true,
"captchaMode": "token"
// outras configura??es permanecem as mesmas
}
3. Atualize as configura??es do Scrapy para carregar a extens?o
Modifique seu settings.py
para configurar o Playwright para carregar a extens?o CapSolver. Voc¨º precisar¨¢ especificar o caminho para a extens?o e passar os argumentos necess¨¢rios para o Playwright.
python
# settings.py
import os
from pathlib import Path
# Configura??es existentes do Playwright
PLAYWRIGHT_BROWSER_TYPE = 'chromium'
PLAYWRIGHT_LAUNCH_OPTIONS = {
'headless': False, # Deve ser Falso para carregar extens?es
'args': [
'--disable-extensions-except={}'.format(os.path.abspath('CapSolver.Browser.Extension')),
'--load-extension={}'.format(os.path.abspath('CapSolver.Browser.Extension')),
],
}
# Certifique-se de que o reator Twisted esteja definido
TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'
Nota: Carregar extens?es de navegador requer que o navegador seja executado no modo n?o sem cabe?a. Portanto, defina 'headless': False
.
4. Crie um Spider que lida com captchas
Crie um novo spider ou modifique um existente para interagir com captchas usando a extens?o 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), # Aguarde a extens?o para processar
],
"playwright_context": "default",
},
callback=self.parse_captcha
)
async def parse_captcha(self, response):
page = response.meta["playwright_page"]
# Localize a caixa de sele??o ou o frame captcha e interaja de acordo
try:
# Aguarde o iframe captcha estar dispon¨ªvel
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:
# Clique na caixa de sele??o captcha
await captcha_frame.click("div#checkbox")
# Aguarde o captcha ser resolvido pelo CapSolver
await page.wait_for_selector("div.captcha-success", timeout=60000) # Ajuste o seletor conforme necess¨¢rio
self.logger.info("Captcha resolvido com sucesso.")
else:
self.logger.warning("captcha iframe n?o encontrado.")
except Exception as e:
self.logger.error(f"Erro ao lidar com o captcha: {e}")
# Prossiga analisando a p¨¢gina depois que o captcha for resolvido
for item in response.css("div.content"):
yield {
"title": item.css("h2::text").get(),
"description": item.css("p::text").get(),
}
# Lidar com pagina??o ou intera??es adicionais, se necess¨¢rio
5. Executando o Spider
Certifique-se de que todas as depend¨ºncias estejam instaladas e execute seu spider usando:
bash
scrapy crawl captcha_spider
Recursos avan?ados
Quando voc¨º se sentir confort¨¢vel com os fundamentos, o Scrapy-Playwright oferece v¨¢rios recursos avan?ados para aprimorar seus projetos de scraping.
Manipulando m¨²ltiplas p¨¢ginas
Raspando v¨¢rias p¨¢ginas ou navegando por um site pode ser simplificado usando as capacidades de navega??o do 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):
# Extraia dados da primeira p¨¢gina
for item in response.css("div.list-item"):
yield {
"name": item.css("span.name::text").get(),
"price": item.css("span.price::text").get(),
}
# Navegue para a pr¨®xima p¨¢gina
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"),
],
},
)
Usando contextos do Playwright
O Playwright permite a cria??o de v¨¢rios contextos de navegador, o que pode ser ¨²til para lidar com sess?es, cookies ou tarefas de scraping paralelas.
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,
},
}
Em seu spider, especifique o contexto:
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):
# Sua l¨®gica de an¨¢lise aqui
pass
Integrando com Middleware
O Scrapy-Playwright pode ser integrado a outros middlewares para aprimorar a funcionalidade, como lidar com novas tentativas, gerenciamento de proxy ou cabe?alhos personalizados.
python
# settings.py
DOWNLOADER_MIDDLEWARES.update({
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
'scrapy_playwright.middleware.ScrapyPlaywrightDownloadHandler': 543,
})
# Exemplo de definir cabe?alhos personalizados
DEFAULT_REQUEST_HEADERS = {
'User-Agent': 'MyCustomAgent/1.0',
'Accept-Language': 'en-US,en;q=0.9',
}
Boas pr¨¢ticas
Para aproveitar ao m¨¢ximo o Scrapy-Playwright e o CapSolver, considere as seguintes boas pr¨¢ticas:
- Otimize o uso do Playwright: Use o Playwright apenas para solicita??es que exigem renderiza??o de JavaScript para economizar recursos.
- Gerencie contextos de navegador: Reutilize contextos de navegador sempre que poss¨ªvel para melhorar o desempenho e reduzir o overhead.
- Lidar com timeouts graciosamente: Defina timeouts apropriados e tratamento de erros para gerenciar p¨¢ginas de carregamento lento.
- Respeite o Robots.txt e os termos de servi?o: Sempre certifique-se de que suas atividades de scraping estejam em conformidade com as pol¨ªticas do site de destino.
- Implemente limita??o e atrasos: Evite sobrecarregar o servidor de destino, implementando pr¨¢ticas de scraping corretas.
- Proteja suas chaves de API CapSolver: Armazene informa??es confidenciais, como chaves de API, com seguran?a e evite codific¨¢-las em seus scripts.
- Monitore e registre a atividade de scraping: Mantenha o controle de suas opera??es de scraping para identificar e resolver problemas rapidamente.
C¨®digo b?nus
Reivindique seu C¨®digo B?nus para as principais solu??es de captcha no CapSolver: scrape. Ap¨®s resgat¨¢-lo, voc¨º receber¨¢ um b?nus extra de 5% ap¨®s cada recarga, ilimitado vezes.

Conclus?o
O Scrapy-Playwright ¨¦ um divisor de ¨¢guas para o web scraping, fechando a lacuna entre a extra??o de conte¨²do est¨¢tico e din?mico. Ao aproveitar o poder do framework robusto do Scrapy e da automa??o avan?ada de navegador do Playwright, voc¨º pode lidar com as tarefas de scraping mais desafiadoras com facilidade. Al¨¦m disso, a integra??o do CapSolver permite que voc¨º supere desafios de captcha, garantindo a coleta de dados ininterrupta, mesmo dos sites mais protegidos.
Se voc¨º est¨¢ raspando sites de com¨¦rcio eletr?nico, plataformas de m¨ªdia social ou qualquer site com JavaScript intenso, o Scrapy-Playwright combinado com o CapSolver fornece as ferramentas de que voc¨º precisa para ter sucesso. Seguindo as melhores pr¨¢ticas e aproveitando essas integra??es poderosas, voc¨º pode construir solu??es de web scraping eficientes, confi¨¢veis e escalon¨¢veis, adaptadas ¨¤s suas necessidades espec¨ªficas.
Pronto para elevar seus projetos de scraping? Mergulhe no Scrapy-Playwright e no CapSolver e desbloqueie novas possibilidades para coleta e automa??o de dados.
Declara??o de Conformidade: As informa??es fornecidas neste blog s?o apenas para fins informativos. A CapSolver est¨¢ comprometida em cumprir todas as leis e regulamentos aplic¨¢veis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas ¨¦ estritamente proibido e ser¨¢ investigado. Nossas solu??es de resolu??o de captcha melhoram a experi¨ºncia do usu¨¢rio enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados p¨²blicos. Incentivamos o uso respons¨¢vel de nossos servi?os. Para mais informa??es, visite nossos Termos de Servi?o e Pol¨ªtica de Privacidade.
Mais

Como resolver qualquer vers?o do reCAPTCHA Enterprise v2, v2 invis¨ªvel, v3, v3 empresa 0,9 ponto
Domine a resolu??o de qualquer vers?o do reCaptcha com o CapSolver: Este guia oferece um tutorial passo a passo para resolver o reCaptcha de forma eficaz, garantindo resultados precisos a cada vez.

Ad¨¦lia Cruz
11-Oct-2025

Como resolver captchas de imagem
Este artigo de blog fornece um guia completo sobre como resolver captchas de imagem usando o CapSolver, uma ferramenta projetada para automatizar o processo. Ele come?a com uma explica??o do que ¨¦ um captcha de imagem, seguido por um passo a passo detalhado sobre como usar a API do CapSolver para resolver esses captchas. O guia inclui exemplos das solicita??es e respostas envolvidas no processo. O artigo conclui com uma observa??o sobre a efici¨ºncia e a conveni¨ºncia de usar o CapSolver para resolver captchas de imagem, tornando-o um recurso inestim¨¢vel para aqueles que desejam automatizar tarefas que envolvem resolu??o de captchas.

Ad¨¦lia Cruz
11-Oct-2025

Como resolver reCaptcha vers?o 2 Invis¨ªvel
Este blog serve como um guia abrangente sobre como resolver reCaptcha v2 invis¨ªvel usando Capsolver. Ele fornece um guia passo a passo, desde o envio das informa??es necess¨¢rias ao Capsolver at¨¦ a verifica??o dos resultados. O blog foi projetado para ser f¨¢cil de entender e seguir, tornando o processo de implementar e resolver reCaptcha v2 invis¨ªvel no seu site r¨¢pido e eficiente. ? um guia ¨²nico e abrangente, garantindo que os leitores adquiram uma compreens?o completa do processo sem pl¨¢gio.

Ad¨¦lia Cruz
11-Oct-2025

Resolver reCaptcha v2 Empresarial
No mundo digital, seguran?a e conveni¨ºncia do usu¨¢rio frequentemente se encontram nos extremos opostos do espectro. CAPTCHAs, especificamente o reCaptcha, t¨ºm sido fundamentais para encontrar um equil¨ªbrio entre os dois. No entanto, e se voc¨º precisar resolver os testes de reCaptcha frequentemente complexos e demorados, especialmente o reCaptcha V2 Enterprise, por um prop¨®sito leg¨ªtimo como testes automatizados? Neste blog, vamos te mostrar o processo de resolver o reCaptcha V2 Enterprise usando a API do CapSolver.

Alo¨ªsio V¨ªtor
11-Oct-2025

Resolver reCAPTCHA v3
Aprenda a resolver o reCaptcha V3 usando o CapSolver: diversos tipos de tarefas, integra??o simples da API e solu??es eficazes para automa??o e testes

Alo¨ªsio V¨ªtor
10-Oct-2025

Como encontrar a fun??o de callback do reCaptcha
Encontrar o callback de um reCAPTCHA envolve identificar a fun??o JavaScript que ¨¦ executada depois que o reCAPTCHA ¨¦ resolvido com sucesso. Segue uma breve vis?o geral das etapas que voc¨º pode seguir.

Ad¨¦lia Cruz
23-Sep-2025