Ir para o conteúdo

O Guia Definitivo para Raspar a Amazon com Python (2023)

A coleta de dados da Amazon, uma das maiores plataformas de comércio eletrônico, pode fornecer informações valiosas. Esteja você procurando comparar preços, analisar avaliações de clientes ou rastrear a disponibilidade de produtos, a raspagem da web pode ser uma ferramenta útil. Este guia fornece instruções detalhadas e exemplos de código Python para fazer scraping na Amazon.

Ética da Web Scraping

Antes de nos aprofundarmos, é importante observar que a raspagem deve ser feita com responsabilidade para minimizar a demanda nos servidores do site. Uma maneira de fazer isso é focar na página de pesquisa da Amazon, onde você pode extrair dados básicos do produto, como nome, preço, URL da imagem, classificação e número de avaliações. Essa abordagem reduzirá significativamente o número de solicitações que você precisa fazer para a Amazon, tornando seu scraper mais rápido e mais barato de executar.

Bibliotecas de raspagem da Web em Python

Python oferece uma infinidade de bibliotecas para web scraping, e escolher a certa depende de suas necessidades específicas e nível de conforto com Python. Aqui estão algumas das bibliotecas mais usadas:

  1. pedidos: uma biblioteca Python popular para fazer solicitações HTTP. Ele abstrai as complexidades de fazer solicitações por trás de uma API simples, permitindo que você envie solicitações HTTP/1.1 com vários métodos como GET, POST e outros.
  2. Linda Sopa: é usado para analisar documentos HTML e XML e extrair dados. Ele cria uma árvore de análise a partir do código-fonte da página que pode ser usada para extrair dados de maneira hierárquica e mais legível.
  3. Escamoso: um framework Python de código aberto projetado especificamente para web scraping. É uma estrutura versátil que pode lidar com uma ampla gama de tarefas de extração e é capaz de extrair grandes conjuntos de dados.
  4. Selênio: Uma ferramenta poderosa para controlar um navegador da Web por meio do programa. É muito útil para web scraping porque pode lidar com todos os tipos de conteúdo do site, incluindo conteúdo gerado por JavaScript. Ele também permite a interação do usuário, como clicar, rolar, etc.
  5. parcela: usado para extrair dados de HTML e XML usando seletores XPath e CSS. Ele é construído sobre a biblioteca lxml, tornando-o flexível e fácil de usar.

Extraindo dados de produtos das páginas de pesquisa da Amazon

A primeira etapa na extração da Amazon é extrair dados das páginas de pesquisa. As bibliotecas Python Requests e Parsel podem ser usadas para esta tarefa. Aqui está um script de exemplo que coleta dados de produtos de todas as Amazon Search Pages disponíveis para uma determinada palavra-chave (por exemplo, 'iPad'):

solicitações de importação de parsel import Selector de urllib.parse import urljoin keyword_list = ['ipad'] product_overview_data = [] para palavra-chave em keyword_list: url_list = [f'https://www.amazon.com/s?k={keyword} &page=1'] para url em url_list: tente: response = requests.get(url) if response.status_code == 200: sel = Selector(text=response.text) # Extract Product Page search_products = sel.css("div .s-result-item[data-component-type=s-search-result]") para o produto em search_products: related_url = product.css("h2>a::attr(href)").get() asin = parente_url.split('/')[3] if len(relative_url.split('/')) >= 4 else Nenhum product_url = urljoin('https://www.amazon.com/', parente_url).split( "?")[0] product_overview_data.append( { "keyword": palavra-chave, "asin": asin, "url": product_url, "ad": True if "/slredirect/" in product_url else False, "title": product.css("h2>a>span::text").get(), "price-data-a-size=xl .a-offscreen::text").get(), "real_price": product. css(".a-price[data-a-size=b] .a-offscreen::text").get(), "rating": (product.css("span[aria-label~=stars]: :attr "rating_count": product.css("span[aria-label~=stars] + span::attr(aria-label)").get(), "thumbnail_url": product.xpath("//img[ has-class('s-image')]/@src").get(), } ) # Obter todas as páginas if "&page=1" in url: available_pages = sel.xpath( '//a[has-class ("s-pagination-item")][not(has-class("s-pagination-separator"))]/text()' ).getall() para a página em available_pages: search_url_paginated = f'https:// www.amazon.com/s?k={keyword}&page={page}' url_list.append(search_url_paginated) except Exception as e: print("Error", e)

Este script coletará uma matriz de dados do produto, cada um representado como um dicionário com as seguintes chaves:

  • keyword: A palavra-chave de pesquisa usada (por exemplo, 'iPad')
  • asin: O número de identificação padrão da Amazon exclusivo do produto
  • url: a URL do produto
  • ad: Um booleano que indica se o produto é um anúncio
  • title: O título do produto
  • price: O preço do produto
  • real_price: O preço original do produto antes de qualquer desconto
  • rating: A classificação do produto
  • rating_count: o número de avaliações que o produto recebeu
  • thumbnail_url: o URL da imagem em miniatura do produto

O script também identifica todas as páginas disponíveis para a palavra-chave de pesquisa e as anexa ao url_list para raspagem【9†source】.

Extraindo dados de produtos das páginas de produtos da Amazon

Depois de ter uma lista de URLs de produtos da Amazon, você pode coletar todos os dados do produto de cada página de produto da Amazon individual. Aqui está um script de exemplo usando as bibliotecas Python Requests e Parsel para fazer isso:

importar re importar pedidos de parsel import Selector de urllib.parse import urljoin product_urls = [ 'https://www.amazon.com/2021-Apple-10-2-inch-iPad-Wi-Fi/dp/B09G9FPHY6/ref= sr_1_1', ] product_data_list = [] para product_url em product_urls: tente: response = requests.get(product_url) if response.status_code == 200: sel = Selector(text=response.text) image_data = json.loads(re.findall (r"colorImages':.*'initial':\s*(\[.+?\])},\n", response.text)[0]) variant_data = re.findall(r'dimensionValuesDisplayData"\s *:\s* ({.+?}),\n', response.text) feature_bullets = [bullet.strip() para marcador em sel.css("#feature-bullets li ::text").getall( )] preço = sel.css('.a-price span[aria-hidden="true"] ::text').get("") if not price: price = sel.css('.a-price . a-offscreen ::text').get("") product_data_list.append({ "name": sel.css("#productTitle::text").get("").strip(), "price": preço, "estrelas": sel.css("i[data-hook=average-star-rating] ::text").get("").strip(), "rating_count": sel.css("div[ data-hook=total-review-count] ::text").get("").strip(), "feature_bullets": feature_bullets, "images": image_data, "variant_data": variant_data, }) except Exception as e : print("Erro",e)

Este script coleta uma matriz de dados do produto, com cada produto representado como um dicionário com as seguintes chaves:

  • name: O nome do produto
  • price: O preço do produto
  • stars: A classificação por estrelas do produto
  • rating_count: o número total de avaliações que o produto recebeu
  • feature_bullets: uma lista de marcadores de recursos do produto
  • images: Uma lista de imagens de alta resolução do produto
  • variant_data: Dados sobre as variantes do produto (por exemplo, diferentes cores ou tamanhos disponíveis)

Vale a pena notar que este script é projetado para extrair dados de páginas de produtos com um layout específico. Se a Amazon alterar o layout de suas páginas de produtos, o script pode precisar ser atualizado【11†source】.

Considerações adicionais

Embora os scripts acima forneçam um ponto de partida para a extração da Amazon, há considerações adicionais a serem consideradas para uma solução de extração completa e robusta:

1. Lidando com Conteúdo Dinâmico

Algumas páginas de produtos da Amazon usam conteúdo dinâmico, que requer JavaScript para carregar. Se você tentar raspar essas páginas com os métodos descritos acima, poderá descobrir que alguns dos dados desejados estão ausentes. Nesses casos, você precisará usar uma ferramenta que possa renderizar JavaScript, como Selenium ou Puppeteer.

2. Respeitando o Robots.txt

Amazon's robots.txt arquivo informa aos rastreadores da Web quais páginas eles podem visitar. Embora este arquivo não seja juridicamente vinculativo, ignorá-lo pode levar ao banimento do seu endereço IP. O melhor é respeitar robots.txt arquivo para evitar possíveis problemas.

3. Limitação de taxa

A Amazon pode limitar o número de solicitações que você pode fazer em um determinado período de tempo. Se você fizer muitas solicitações muito rapidamente, a Amazon pode banir seu endereço IP, você pode precisar proxies para Amazon. Para evitar isso, você pode usar técnicas como limitar suas solicitações ou endereços IP rotativos.

4. Considerações éticas

A raspagem da Web pode colocar uma demanda significativa no servidor de um site, por isso é importante raspar com responsabilidade. Se você puder obter os dados de que precisa em menos páginas, é mais ético fazê-lo. Por exemplo, se você precisar apenas de dados básicos do produto (nome, preço, URL da imagem, classificação, número de comentários etc.), poderá coletar esses dados das páginas de pesquisa em vez das páginas do produto, reduzindo o número de solicitações necessárias. fazer por um fator de 20.


Concluindo, embora o web scraping possa ser uma ferramenta poderosa para extrair dados de sites como a Amazon, é importante usar essas técnicas com responsabilidade e com respeito aos termos de serviço do site e às demandas que você está colocando em seus servidores.

Junte-se à conversa

O seu endereço de e-mail não será publicado. Os campos obrigatórios são marcados com *