Como raspar Amazon: Guia 2024

Saiba como raspar Amazon usando python e como usar o Navegador de Raspagem da Bright Data.
16 min read
How To Scrape Amazon

Agora, pode estar a perguntar-se: “Porquê concentrar-se em Amazon? Sendo uma das maiores plataformas de comércio eletrónico do mundo, Amazon é uma fonte rica de dados valiosos. Estes dados abrangem uma vasta gama de pormenores sobre produtos, preços, comentários de clientes e tendências emergentes. Por exemplo, os vendedores podem utilizar estes dados para monitorizar os concorrentes, os investigadores podem estudar as tendências do mercado e os consumidores podem tomar decisões de compra informadas. As possibilidades são infinitas.

Neste tutorial, você aprenderá a raspar Amazon usando ferramentas como Beautiful Soup e Playwright. Ao longo do processo, passo a passo, também aprenderá sobre a solução da Bright Data, que pode acelerar significativamente o processo.

Raspar Amazon manualmente com Python

Antes de começar a extrair dados do sítio web de Amazon, tem de se certificar de que tem todas as bibliotecas necessárias instaladas no seu computador. Ter conhecimentos básicos de raspagem da web e HTML também é útil.

Nota importante: Este tutorial tem objetivos meramente educativos e serve como demonstração de capacidades técnicas. É importante reconhecer que a raspagem de dados de Amazon suscita preocupações relativamente aos termos de utilização e à legalidade. A raspagem não autorizada pode ter consequências graves, incluindo ações legais e a suspensão da conta. Proceda sempre com cautela e respeite as práticas éticas.

Pré-requisitos

Para prosseguir com o tutorial, é necessário ter Python instalado na sua máquina. Se é novo em Python, leia este guia sobre como fazer raspagem com Python para obter instruções detalhadas. Se já estiver a utilizar Python, certifique-se de que é a versão 3.7.9 ou mais recente.

Assim que tiver Python pronto, abra o seu terminal ou shell e crie um diretório de projeto utilizando os seguintes comandos:

mkdir scraping-amazon-python && cd scraping-amazon-python

Depois de estabelecer o diretório do projeto, o passo seguinte envolve a instalação de um conjunto de bibliotecas adicionais que são indispensáveis para uma raspagem eficaz de dados da web. Especificamente, utilizará Requests, uma biblioteca concebida para lidar com pedidos HTTP em Python; pandas, uma biblioteca robusta concebida para a manipulação e análise de dados; Beautiful Soup (BS4) para analisar conteúdos HTML; e Playwright para automatizar tarefas relacionadas com a navegação na web.

Para instalar estas bibliotecas, abra o seu terminal ou shell e execute os seguintes comandos:

pip3 install beautifulsoup4
pip3 install requests
pip3 install pandas
pip3 install playwright
playwright install

Certifique-se de que o processo de instalação termina sem problemas antes de avançar para o passo seguinte.

Atenção: O comando final (ou seja, playwright install) é crucial, pois garante que os binários do navegador necessários sejam instalados corretamente.

Navegar nos componentes de disposição e dados de Amazon

Depois de instalar as bibliotecas necessárias, é necessário familiarizar-se com a estrutura do sítio web. A página principal de Amazon apresenta uma barra de pesquisa fácil de utilizar, que lhe permite explorar uma vasta gama de produtos, desde eletrónica a livros.

Depois de introduzir os seus critérios de pesquisa, os resultados são apresentados num formato de lista, com produtos com os seus títulos, preços, classificações e outros pormenores pertinentes. É de salientar que estes resultados de pesquisa podem ser ordenados utilizando vários filtros, como a gama de preços, a categoria do produto e as opiniões dos clientes:

Amazon

Caso pretenda uma lista mais extensa de resultados, pode tirar partido dos botões de paginação posicionados na parte inferior da página. Em geral, cada página contém várias listagens, o que lhe dá a oportunidade de consultar outros produtos. Os filtros situados no topo da página oferecem a possibilidade de refinar a sua pesquisa de acordo com as suas necessidades.

Para obter informações sobre a estrutura HTML da Amazon, siga estes passos:

  1. Visite o sítio web de Amazon.
  2. Introduza o produto pretendido na barra de pesquisa ou selecione uma categoria da lista em destaque.
  3. Abra as ferramentas de desenvolvimento do navegador, clicando com o botão direito do rato num produto e selecionando Inspecionar elemento.
  4. Explore o esquema HTML para identificar as etiquetas e os atributos dos dados que pretende extrair.

Raspar produtos de Amazon

Agora que já está familiarizado com a estrutura de produtos de Amazon, nesta seção, irá reunir detalhes como o nome do produto, a classificação, o número de classificações e o preço.

No diretório do seu projeto, crie um script Python chamado amazon_scraper.py e adicione-lhe o seguinte código:

import asyncio
from playwright.async_api import async_playwright
import pandas as pd
async def scrape_amazon():
    async with async_playwright() as pw:
        # Launch new browser
        browser = await pw.chromium.launch(headless=False)
        page = await browser.new_page()
        # Go to Amazon URL
        await page.goto('https://www.amazon.com/s?i=fashion&bbn=115958409011')
        # Extract information
        results = []
        listings = await page.query_selector_all('div.a-section.a-spacing-small')
        for listing in listings:
            result = {}
            # Product name
            name_element = await listing.query_selector('h2.a-size-mini > a > span')
            result['product_name'] = await name_element.inner_text() if name_element else 'N/A'
            
            # Rating
            rating_element = await listing.query_selector('span[aria-label*="out of 5 stars"] > span.a-size-base')
            result['rating'] = (await rating_element.inner_text())[0:3]await rating_element.inner_text() if rating_element else 'N/A'
            
            # Number of reviews
            reviews_element = await listing.query_selector('span[aria-label*="stars"] + span > a > span')
            result['number_of_reviews'] = await reviews_element.inner_text() if reviews_element else 'N/A'
            
            # Price
            price_element = await listing.query_selector('span.a-price > span.a-offscreen')
            result['price'] = await price_element.inner_text() if price_element else 'N/A'
            if(result['product_name']=='N/A' and result['rating']=='N/A' and result['number_of_reviews']=='N/A' and result['price']=='N/A'):
                pass
            else:
                results.append(result)
        # Close browser
        await browser.close()
        
        return results
# Run the scraper and save results to a CSV file
results = asyncio.run(scrape_amazon())
df = pd.DataFrame(results)
df.to_csv('amazon_products_listings.csv', index=False)

Neste código, está a utilizar as capacidades assíncronas de Python com a biblioteca Playwright para raspar listagens de produtos de uma página específica de moda de Amazon. Depois de iniciar uma nova instância do navegador e navegar para o URL de destino de Amazon, extrai informações sobre o produto, como o nome do produto, a classificação, o número de avaliações e o preço. Depois de iterar sobre cada listagem na página, filtra as listagens que não têm dados (ou seja, marca-as como “N/A”). Os resultados da raspagem são depois guardados num DataFrame de Pandas e subsequentemente exportados para um ficheiro CSV denominado amazon_products_listings.csv.

Para executar o script, execute python3 amazon_scraper.py no seu terminal ou shell. O resultado deve ser semelhante a este:

product_name,rating,number_of_reviews,price
Crocs Women's Kadee Ii Sandals,4.2,17.5K+,$29.99
Teva Women's W Flatform Universal Sandal,4.7,7K+,$58.80
"OOFOS OOriginal Sport Sandal - Lightweight Recovery Footwear - Reduces Stress on Feet, Joints & Back - Machine Washable - Hand-Painted Graphics",4.5,9.4K+,N/A
"Crocs Women's Brooklyn Low Wedges, Platform Sandals",4.6,11.7K+,N/A
Teva Women's Original Universal Sandal,4.7,18.7K+,$35.37
Reef Women's Water Vista Sandal,4.5,1.9K+,$59.95
Crocs Women's Brooklyn Platform Slides Sandal,4.2,376,N/A
…output omitted…

Nota: Se o script não funcionar na primeira vez que o executar, tente executá-lo novamente. Amazon dispõe de medidas sofisticadas antirraspagem que podem impedir ou bloquear as suas tentativas de raspagem de dados.

Técnicas avançadas de raspagem para Amazon

Ao iniciar a sua viagem de raspagem com Amazon, descobrirá rapidamente que este gigante do comércio eletrónico, conhecido pelas suas páginas web complexas e intrincadas, coloca desafios que exigem mais do que apenas métodos básicos de raspagem. Veja algumas técnicas avançadas que podem ajudar a garantir uma experiência de raspagem suave e eficiente:

Lidar com a paginação

Amazon apresenta vários produtos, muitas vezes em várias páginas. Para captar todos os dados, o seu script deve ser capaz de navegar através destas páginas sem problemas. Um método comum é visar o botão Seguinte na parte inferior das listagens de produtos. Ao identificar o seu seletor único, pode programar o seu script para clicar neste botão, conduzindo-o para a página seguinte. No entanto, certifique-se de que o seu raspador aguarda que todos os elementos sejam carregados antes de prosseguir.

Ignorar anúncios

Os anúncios aparecem frequentemente nas listagens de produtos de Amazon. Estes anúncios podem ter uma estrutura ligeiramente diferente da dos produtos normais, o que pode causar problemas no seu processo de raspagem. Para resolver este problema, é necessário detetar elementos ou etiquetas que signifiquem um anúncio. Por exemplo, procure etiquetas com rótulos como Patrocinado ou Anúncio. Uma vez detetadas, pode dar instruções ao seu script para ignorar estas entradas, garantindo que apenas coleta dados genuínos sobre o produto.

Reduzir o bloqueio

Amazon, vigilante em relação ao seu conteúdo, pode bloquear ou suspender temporariamente atividades que considere robóticas ou suspeitas. É crucial fazer com que o seu raspador pareça o mais humano possível.

Para evitar ser bloqueado, é preciso introduzir atrasos ou intervalos aleatórios entre os pedidos usando funções como asyncio.sleep(random.uniform(1, 5)). Isto faz com que o padrão de raspagem pareça menos robótico. Além disso, considere a rotação de agentes de usuário e endereços IP para reduzir o risco de deteção. Recorrer a serviços de resolução de CAPTCHA também pode ser benéfico se for confrontado com desafios CAPTCHA.

Tratar o conteúdo de forma dinâmica

Alguns dos conteúdos de Amazon, como as seções de avaliações ou de perguntas e respostas, são carregados dinamicamente e um raspador básico pode não ver estes dados. É necessário garantir que o seu raspador pode executar JavaScript e esperar que o conteúdo dinâmico seja carregado. Com ferramentas como Playwright ou Selenium, pode utilizar esperas explícitas, garantindo que elementos específicos sejam carregados antes de o raspador prosseguir.

Definir um limite de raspagem

Infelizmente, o envio de muitos pedidos simultâneos pode resultar no seu IP numa lista negra. Para evitar que isto aconteça, é necessário limitar o ritmo de envio dos pedidos.

Conceba o seu script de modo a não bombardear os servidores de Amazon. É essencial estabelecer um prazo razoável entre os pedidos, tal como referido anteriormente.

Ao implementar estas técnicas avançadas, não só aumentará a eficiência dos seus esforços de raspagem em Amazon, como também garantirá a longevidade, reduzindo as hipóteses de o seu raspador ser detetado ou bloqueado.

Considere a possibilidade de utilizar Bright Data para analisar Amazon

Embora a raspagem manual da web possa produzir resultados para tarefas mais pequenas, pode ser entediante e menos eficiente quando se aumenta a escala. Para uma abordagem mais simplificada da coleta de grandes quantidades de dados de Amazon, considere a utilização de Bright Data.

Com o Navegador de Raspagem da Bright Data, você pode interagir com sítios dinâmicos como Amazon sem problemas, pois ele navega habilmente através de JavaScript, pedidos AJAX e outras complexidades. Ou, se estiver com pressa para obter dados estruturados de Amazon, quer se trate de listagens de produtos, avaliações ou perfis de vendedores, pode aceder imediatamente ao seu conjunto de dados de Amazon, que lhe permite descarregar e aceder a dados selecionados diretamente da sua plataforma.

Criar uma conta de Bright Data

Para começar a utilizar Bright Data, é necessário criar e configurar a sua conta. Para o fazer, siga estes passos:

Abra o seu navegador e aceda ao sítio web da Bright Data. Clique em Iniciar teste gratuito e proceda conforme solicitado.

Uma vez no seu painel de controlo, localize o ícone do cartão de crédito na barra lateral esquerda para aceder à página de Faturação. Aqui, introduza um método de pagamento válido para ativar a sua conta:

Página de faturação.

Em seguida, vá para a seção Infraestrutura de raspagem e proxies ao selecionar o respetivo ícone. Selecione Navegador de Raspagem > Começar:

NAVEGADOR DE RASPAGEM

Dê um nome adequado à sua solução e confirme com o botão Adicionar:

Em Parâmetros de acesso, tome nota do seu nome de usuário, host (predefinido) e palavra-passe. Precisará deles mais tarde:

Uma vez concluídos estes passos, está pronto para extrair os dados.

Extrair dados de produtos de Amazon usando o Navegador de Raspagem

Para começar a raspar dados de produtos de Amazon usando Bright Data, crie um ficheiro chamado amazon_scraper_bdata.py e adicione-lhe o seguinte código:

import asyncio
from playwright.async_api import async_playwright
import pandas as pd
username='YOUR_BRIGHTDATA_USERNAME'
password='YOUR_BRIGHTDATA_PASSWORD'
auth=f'{username}:{password}'
host = 'YOUR_BRIGHTDATA_DEFAULT_HOST'
browser_url = f'wss://{auth}@{host}'
async def scrape_amazon_bdata():
    async with async_playwright() as pw:
        print('connecting')
        # Launch new browser
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('connected')
        page = await browser.new_page()
        print('navigating')
        # Go to Amazon URL
        await page.goto('https://www.amazon.com/s?i=fashion&bbn=115958409011', timeout=600000)
        print('data extraction in progress')
        # Extract information
        results = []
        listings = await page.query_selector_all('div.a-section.a-spacing-small')
        for listing in listings:
            result = {}
            # Product name
            name_element = await listing.query_selector('h2.a-size-mini > a > span')
            result['product_name'] = await name_element.inner_text() if name_element else 'N/A'
            
            # Rating
            rating_element = await listing.query_selector('span[aria-label*="out of 5 stars"] > span.a-size-base')
            result['rating'] = (await rating_element.inner_text())[0:3]await rating_element.inner_text() if rating_element else 'N/A'
            
            # Number of reviews
            reviews_element = await listing.query_selector('span[aria-label*="stars"] + span > a > span')
            result['number_of_reviews'] = await reviews_element.inner_text() if reviews_element else 'N/A'
            
            # Price
            price_element = await listing.query_selector('span.a-price > span.a-offscreen')
            result['price'] = await price_element.inner_text() if price_element else 'N/A'
            if(result['product_name']=='N/A' and result['rating']=='N/A' and result['number_of_reviews']=='N/A' and result['price']=='N/A'):
                pass
            else:
                results.append(result)
        # Close browser
        await browser.close()
        
        return results
# Run the scraper and save results to a CSV file
results = asyncio.run(scrape_amazon_bdata())
df = pd.DataFrame(results)
df.to_csv('amazon_products_bdata_listings.csv', index=False)

Neste código, está a utilizar a biblioteca Playwright em combinação com asyncio para raspar de forma assíncrona os detalhes do produto de uma página web de Amazon. Configurou os detalhes de autenticação para Bright Data, um serviço de proxy, e depois ligou-se a um navegador utilizando este serviço.

Uma vez ligado, o script navega para o URL especificado de Amazon, extrai informações sobre o produto, como o nome, a classificação, o número de avaliações e o preço, e compila estes detalhes numa lista. Se um determinado produto não tiver algum dos dados acima referidos, é ignorado.

Após a raspagem, o navegador é fechado e os detalhes extraídos do produto são guardados num ficheiro CSV denominado amazon_products_bdata_listings.csv.

Importante: Lembre-se de substituir YOUR_BRIGHTDATA_USERNAME, YOUR_BRIGHTDATA_PASSWORD e YOUR_BRIGHTDATA_HOST pelos detalhes exclusivos da sua conta de Bright Data (encontrados no separador “Parâmetros de acesso”).

Execute o código a partir do seu terminal ou shell utilizando o seguinte comando:

python3 amazon_scraper_bdata.py

O resultado deve ser semelhante a este:

product_name,rating,number_of_reviews,price
Women's Square Neck Bodice Dress Sleeveless Tank Top Stretch Flare Mini Dresses,N/A,131,$32.99
"Women's Swiftwater Sandal, Lightweight and Sporty Sandals for Women",N/A,"35,941",$19.95
Women's Elegant Sleeveless Off Shoulder Bodycon Long Formal Party Evening Dress,N/A,"3,122",$49.99
Women 2023 Summer Sleeveless Tank Dresses Crew Neck Slim Fit Short Casual Ruched Bodycon Party Club Mini Dress,N/A,"40,245",$33.99
"Infinity Dress with Bandeau, Convertible Bridesmaid Dress, Long, Plus Size, Multi-Way Dress, Twist Wrap Dress",N/A,"11,412",$49.99
…output omitted…

Embora a raspagem manual de Amazon possa presentar problemas, como CAPTCHAs e restrições de acesso, o Navegador de Raspagem da Bright Data fornece a resiliência e a flexibilidade para enfrentar esses desafios, garantindo a extração ininterrupta de dados.

Conjunto de dados de Amazon da Bright Data

Se não quiser extrair dados manualmente, Bright Data também oferece conjuntos de dados de Amazon já prontos. Nestes conjuntos de dados, encontrará tudo, desde detalhes de produtos a avaliações de usuários. Utilizar estes conjuntos de dados significa que não tem de fazer raspagem de sítios web e que os dados já estão organizados por você.

Para encontrar estes conjuntos de dados, aceda ao seu Painel de Controlo de Bright Data e clique em Conjuntos de dados e IDE para Raspador da Web à esquerda. Em seguida, clique em Obter dados do Mercado de conjuntos de dados:

Em seguida, procure por “amazon” na barra de pesquisa. Em seguida, clique em Ver conjunto de dados:

Escolha o conjunto de dados mais adequado às suas necessidades. Pode utilizar filtros para restringir as suas escolhas. Lembre-se de que o custo depende da quantidade de dados que pretende, pelo que pode escolher em função das suas necessidades e do seu orçamento:

Pode encontrar o código que é utilizado neste tutorial no seguinte repositório de GitHub.

Conclusão

Neste tutorial, você aprendeu como coletar dados de Amazon manualmente usando Python, que vem com seus desafios justos, como CAPTCHAs e limitação de taxa, que podem impedir a raspagem eficiente de dados. No entanto, a utilização de ferramentas da Bright Data e do seu Navegador de Raspagem pode simplificar o processo e atenuar estes problemas.

Bright Data fornece ferramentas que simplificam a coleta de dados de sítios web, incluindo Amazon. Estas ferramentas transformam as difíceis tarefas de raspagem da web em tarefas fáceis, poupando-lhe tempo e energia.

Além disso, Bright Data oferece conjuntos de dados prontos a utilizar, especificamente para Amazon. Isto significa que não tem de começar do zero; pode aceder diretamente a grandes quantidades de dados de Amazon.

Ao utilizar as ferramentas da Bright Data, a coleta de dados torna-se muito fácil, abrindo portas a novas perspetivas e conhecimentos. Mergulhe de cabeça e descubra novas possibilidades de dados com Bright Data!