No mundo acelerado do comércio eletrónico, manter-se à frente da curva significa estar atento à concorrência. Uma forma de o fazer é através de raspagem da web, uma técnica de extração de dados de sítios web. Quer seja um programador experiente ou um novato a mergulhar no mundo da extração de dados, este artigo foi concebido para o ajudar a compreender os prós e contras da raspagem de dados de sítios web de comércio eletrónico.
Há todo o tipo de razões pelas quais pode estar interessado em extrair dados de sítios web de comércio eletrónico, incluindo a análise da concorrência, estudos de mercado, monitorização de preços, geração de pistas ou tomada de decisões com base em dados.
Neste tutorial, você aprenderá sobre alguns dos desafios comuns que enfrentará ao raspar sítios web de comércio eletrônico e como raspá-los usando Playwright, uma biblioteca de Python, e o Navegador de Raspagem da Bright Data.
Problemas com a raspagem da web usando navegadores locais
Embora a capacidade de escrever raspadores que permitem extrair grandes quantidades de dados seja fantástica, fazê-lo pela primeira vez pode ser um processo difícil. Por exemplo, quando utilizam navegadores locais, os programadores deparam-se frequentemente com vários problemas que podem prejudicar a sua eficiência e eficácia. Alguns dos problemas mais comuns são os seguintes:
- Bloqueio de IP: Os sítios web registam frequentemente os endereços IP que fazem os pedidos. Se detetarem um número anormal de pedidos a partir de um único IP (típico da raspagem da web ou ataque de força bruta), podem bloquear esse IP. Quando se utiliza um navegador local, todos os pedidos provêm de um único IP, o que torna este problema significativo.
- Limitação de taxa: Muitos sítios web implementam a limitação da taxa, permitindo apenas um determinado número de pedidos de um endereço IP num determinado período. Se este limite for ultrapassado, outros pedidos podem ser bloqueados ou abrandados, dificultando o processo de raspagem.
- Falta de proxies: Sem um conjunto de proxies, todos os pedidos numa operação de raspagem provêm do mesmo endereço IP. Isto torna mais fácil para os sítios web detetar e bloquear a atividade de raspagem. Em contrapartida, a utilização de um conjunto de proxies permite que os pedidos provenham de diferentes endereços IP, reduzindo o risco de deteção.
- Desafios CAPTCHA: Os sítios web podem utilizar desafios CAPTCHA para verificar se o usuário é um ser humano e não um bot. Os navegadores locais não têm muitas vezes a funcionalidade para resolver automaticamente estes desafios, o que os torna um obstáculo substancial nos esforços de raspagem.
- Conteúdo dinâmico do sítio web: Muitos sítios web modernos utilizam JavaScript para carregar conteúdos de forma dinâmica. Um navegador local pode ter dificuldade em extrair estes sítios web com precisão, porque o conteúdo pode não estar totalmente carregado antes do início da raspagem.
No contexto da raspagem com um navegador local, estas questões contribuem para tornar a raspagem da web um desafio. A falta de funcionalidades avançadas, como a rotação de IPs e a resolução automática de CAPTCHA, pode atrasar os processos de raspagem e diminuir a qualidade e a quantidade de dados coletados. É crucial que os programadores estejam conscientes destes problemas comuns e procurem ferramentas e técnicas para os contornar eficazmente.
A próxima seção discutirá como o Navegador de Raspagem da Bright Data pode ajudar a resolver esses problemas, tornando a raspagem da web uma experiência muito mais fluida e produtiva.
Como fazer raspagem com o Navegador de Raspagem de Bright Data
No mundo da raspagem da web, a Bright Data se destaca como um fornecedor de ponta, e no centro das ofertas da Bright Data está seu navegador de raspagem da web, uma ferramenta projetada especificamente para abordar os desafios enfrentados na extração de dados.
O Navegador de Raspagem resolve facilmente quaisquer problemas de bloqueio de IP porque tem acesso a um vasto conjunto de IPs residenciais e móveis. Isto significa que pode rotar IPs e emular o comportamento orgânico do usuário, reduzindo significativamente o risco de ser bloqueado.
Da mesma forma, aproveitando o extenso conjunto de IPs da Bright Data, o navegador de raspagem pode distribuir pedidos em vários IPs, mitigando efetivamente o problema de limitação de taxa. Além disso, com o Navegador de Raspagem, obtém a gestão automática de proxy. Isto significa que o Navegador de Raspagem lida com a rotação de proxies, assegurando que as suas atividades de raspagem continuem sem intervenção manual.
O Navegador de Raspagem também oferece proteção avançada de impressões digitais do navegador, permitindo-lhe imitar um usuário real. Isto torna mais difícil para os sítios web detetar e bloquear os seus esforços de raspagem:
Com esses recursos em mente, mergulhe no tutorial e aprenda como usar o navegador de raspagem da Bright Data para raspar um sítio web de comércio eletrônico. Aqui, utilizará Python como a linguagem de programação de eleição.
Passo 1: Configurar um novo projeto em Python
O primeiro passo deste tutorial é configurar um novo projeto em Python. Este é o seu espaço de trabalho para a tarefa de raspagem. Pode utilizar qualquer editor de texto ou ambiente de desenvolvimento integrado (IDE) à sua escolha.
Para além disso, certifique-se de que Python esteja instalado na sua máquina. Pode confirmar isto escrevendo python --version
no seu terminal. Se Python estiver instalado, este comando mostra a sua versão. Caso contrário, é necessário instalá-lo.
Depois de se certificar que o Python esteja instalado, é momento de criar o seu diretório de projeto. Abra o seu terminal e navegue até ao local onde pretende que o seu projeto se encontre. Em seguida, introduza os seguintes comandos:
mkdir ecommerce-scraping # This command creates a new directory named ecommerce-scraping.
cd ecommerce-scraping # This command navigates into the newly created directory.
python -m venv env # This command creates a new virtual environment in your project directory.
source env/bin/activate # This command activates the virtual environment.
Criar um ambiente virtual é uma boa prática, uma vez que isola o seu projeto e as suas dependências de outros projetos em Python, prevenindo quaisquer conflitos entre diferentes versões de bibliotecas.
Passo 2: Importar Playwright para o projeto
Playwright é uma biblioteca de Python para automatizar e testar navegadores web. A utilizará para controlar o seu Navegador de Raspagem.
Para instalar Playwright, use pip, que é um instalador de pacotes para Python:
pip install playwright
Depois de instalar Playwright, é necessário executar o comando playwright install
. Isto descarrega os binários do navegador de que o Playwright necessita para automatizar os navegadores:
playwright install
Passo 3: Configurar uma nova conta de Bright Data
Em seguida, precisa de uma conta de Bright Data. Se não tiver uma, navegue até ao sítio web da Bright Data e inscreva-se. Assim que tiver uma conta, poderá criar e gerir as suas instâncias do Navegador de Raspagem e obter acesso às suas credenciais exclusivas:
Passo 4: Criar uma nova instância do Navegador de Raspagem
Depois de ter acesso a uma conta de Bright Data, inicie sessão e navegue até à secção Navegador de Raspagem, onde pode criar uma nova instância do Navegador de Raspagem.
Tome nota do seu ID de anfitrião, uma vez que irá precisar dele quando se ligar ao Navegador de Raspagem:
Passo 5: Conectar-se à instância do Navegador de Raspagem
Agora é momento de conectar Playwright à sua instância do Navegador de Raspagem. A Bright Data fornece um script de exemplo na sua documentação que pode ser utilizado como ponto de partida. Lembre-se de substituir YOUR_ZONE_USERNAME
, YOUR_ZONE_PASSWORD
e YOUR_ZONE_HOST
pelas suas credenciais reais da Bright Data e o ID da instância do Navegador de Raspagem que criou:
import asyncio
from playwright.async_api import async_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting');
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected');
page = await browser.new_page()
print('goto')
await page.goto('https://example.com', timeout=120000)
print('done, evaluating')
print(await page.evaluate('()=>document.documentElement.outerHTML'))
await browser.close()
asyncio.run(main())
Guarde este ficheiro como main.py
no diretório do seu projeto. Em seguida, execute o script com o seguinte:
python main.py
Este script inicia uma nova instância do navegador Chromium e navega para o URL que especificou. Em seguida, imprime o conteúdo da página web e fecha o navegador.
Neste momento, já validou que pode ligar-se à instância do Navegador de Raspagem. Uma vez que este é o seu script de base, reveja rapidamente o código:
import asyncio, async_playwright
são as importações necessárias para o script.asyncio
é uma biblioteca para escrever código concorrente de filo único usando corrotinas, easync_playwright
é a API assíncrona da biblioteca Playwright.auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
configura a autenticação para o Navegador de Raspagem da Bright Data utilizando o nome de usuário e senha da sua zona.browser_url = f'wss ://{auth}@YOUR_ZONE_HOST
cria a URL WebSocket que se conecta ao Navegador de Raspagem da Bright Data.browser = await pw.chromium.connect_over_cdp(browser_url)
liga-se ao Navegador de Raspagem de Bright Data utilizando o navegador Chromium. A palavra-chaveawait
faz uma pausa na execução da função até que a ligação seja estabelecida.await page.goto('https://example.com', timeout=120000)
navega a página para o URL especificado. O parâmetrotimeout
especifica quanto tempo deve ser aguardado para que a navegação seja concluída antes de ser emitido um erro.print(await page.evaluate('()=>document.documentElement.outerHTML'))
avalia o código JavaScript no contexto da página e imprime o resultado. Neste caso, o código JavaScript devolve todo o conteúdo HTML da página.
Passo 6: Raspar um sítio de comércio eletrónico
Depois de se ligar à instância do Navegador de Raspagem, está pronto para começar a fazer raspagem. Neste tutorial, vai fazer raspagem de Livros para Raspar, um sítio web de caixa de areia de comércio eletrónico que permite raspagem.
Abra o seu ficheiro main.py
e substitua o conteúdo pelo seguinte código; em seguida, execute o script no seu terminal:
import asyncio
from playwright.async_api import async_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting');
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected');
page = await browser.new_page()
print('goto')
await page.goto('https://books.toscrape.com', timeout=120000)
print('done, evaluating')
print(await page.evaluate('()=>document.documentElement.outerHTML'))
await browser.close()
asyncio.run(main())
É possível ver o conteúdo da página inicial de Livros para Raspar impresso. Neste ponto, a execução deste script não devolve nada de útil; apenas obtém a totalidade do conteúdo HTML do sítio web de destino.
Passo 7: Extrair informações estruturadas
Para tornar este tutorial um pouco mais útil, extraia alguns dados estruturados. Este processo varia consoante os dados específicos em que está interessado, mas para este exemplo, extraia os nomes e os preços dos livros na página inicial.
Comece por inspecionar a página inicial books.toscrape.com
e identifique os elementos HTML que contêm os nomes e os preços dos livros. Os nomes dos livros estão nas etiquetas <h3>
dentro de <article class= "product_pod">
, e os preços estão nas etiquetas <p class= "price_color">
dentro das mesmas etiquetas <article>
.
Eis como modificar o script para extrair esta informação:
from playwright import sync_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting')
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected')
page = await browser.new_page()
print('goto')
await page.goto('https://books.toscrape.com', timeout=120000)
print('done, evaluating')
# Find all the books in the article elements
books = await page.query_selector_all('article.product_pod')
# Extract and print each book details in a loop
async def get_book_details(book):
# Extract and print book name and price
book_name_element = await book.query_selector('h3 > a')
book_name = await book_name_element.get_attribute('title')
book_price_element = await book.query_selector('div.product_price > p.price_color')
book_price = await book_price_element.inner_text()
print(f'{book_name}: {book_price}')
# Use asyncio.gather() to execute all async calls concurrently
await asyncio.gather(*(get_book_details(book) for book in books))
await browser.close()
asyncio.run(main())
Quando executa este script, vê uma lista de nomes de livros e respetivos preços impressos no seu terminal. É mais ou menos assim:
Este é um exemplo muito simples; no entanto, demonstra como é possível extrair dados estruturados de um sítio web utilizando Playwright e Bright Data. Pode adaptar este script para raspar diferentes tipos de dados de outras páginas ou sítios web.
Agora, dê um passo em frente e gere um ficheiro CSV com os dados raspados.
Passo 8: Guardar os dados raspados num ficheiro CSV
Para guardar os dados raspados num ficheiro CSV, é necessário importar o módulo csv e criar um novo ficheiro CSV
na função main()
. Em seguida, pode escrever os dados raspados para o ficheiro CSV na função get_book_details()
.
Abra o ficheiro main.py
e adicione o seguinte código:
import asyncio
import csv
from playwright.async_api import async_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting')
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected')
page = await browser.new_page()
print('goto')
await page.goto('https://books.toscrape.com', timeout=120000)
print('done, evaluating')
# Find all the books in the article elements
books = await page.query_selector_all('article.product_pod')
async def get_book_details(book):
# Extract book name and price
book_name_element = await book.query_selector('h3 > a')
book_name = await book_name_element.get_attribute('title')
book_price_element = await book.query_selector('div.product_price > p.price_color')
book_price = await book_price_element.inner_text()
return book_name, book_price
# Use asyncio.gather() to execute all async calls concurrently
book_details = await asyncio.gather(*(get_book_details(book) for book in books))
# Write book details to a CSV file
with open('books.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['Book Name', 'Price']) # Write header
writer.writerows(book_details) # Write book details
await browser.close()
asyncio.run(main())
Se executa este script, verá um novo ficheiro chamado books.csv
no seu diretório de projeto. Abra este ficheiro e poderá ver os dados raspados num formato CSV como este:
Conclusão
Neste tutorial, você aprendeu a usar Playwright e Bright Data para raspar dados de um sítio web de comércio eletrônico. Este tutorial apenas arranhou a superfície do que pode ser feito com Playwright e o Navegador de Raspagem de Bright Data, uma solução de navegador proxy focada em desbloquear a coleta de dados de sítios web que usam técnicas avançadas de deteção antibot. Os fundamentos discutidos neste artigo podem ser combinados em fluxos de trabalho mais avançados para automatizar coisas como correspondência de preços, análise de mercado e geração de pistas.
Nos bastidores, a Bright Data utiliza uma infraestrutura proxy completa para encaminhar os seus pedidos através de um conjunto de milhões de IPs. Isto permite-lhe extrair dados de sítios web sem ser bloqueado ou banido. Inscreva-se para obter um teste gratuito e comece a experimentar o Navegador de Raspagem hoje mesmo!
Quer evitar a raspagem de sítios web de comércio eletrónico e obter apenas dados? Adquira conjuntos de dados de comércio eletrónico.