Ao clicar num URL de produto (como https://www.amazon.com/Robux-Roblox-Online-Game-Code/dp/B07RZ74VLR/), entrará num tesouro de informações detalhadas. Para ver como estas informações estão estruturadas, pode utilizar um navegador moderno como o Chrome.
Inspecionar elementos HTML
Clique com o botão direito do rato no título do produto e selecione «Inspecionar». Irá encontrar a marcação HTML do título do produto destacada. Mais especificamente, esta está contida numa tag span e o seu atributo id está definido como «productTitle».
O mesmo método pode ser utilizado para encontrar a marcação de outros elementos essenciais:
- Preço: Clique com o botão direito do rato no preço e selecione «Inspecionar». A parte do preço em dólares está contida numa tag span com a classe «a-price-whole», enquanto os cêntimos estão armazenados noutra tag span, designada com a classe «a-price-fraction».
- Classificação, imagem e descrição: utilize a mesma funcionalidade de inspeção para localizar estes componentes essenciais, cada um deles envolvido em tags e classes específicas.
O processo de extração de dados de produtos da Amazon pode ser dividido em etapas específicas, cada uma focada num aspeto particular das informações do produto. Ao utilizar bibliotecas Python como requests e BeautifulSoup, podemos aceder, localizar e extrair os detalhes desejados. Aqui está um guia detalhado sobre como proceder:
1. Inicie o pedido
Comece por enviar uma solicitação GET com cabeçalhos personalizados para a URL da página do produto:
response = requests.get(url, headers=custom_headers)
soup = BeautifulSoup(response.text, 'lxml')
Utilizamos o BeautifulSoup para analisar o conteúdo HTML, o que facilita a consulta de informações específicas através de seletores CSS. 2. Localizar e extrair o nome do produto
Identifique o título do produto utilizando o ID único productTitle dentro de um elemento span:
title_element = soup.select_one('#productTitle')
title = title_element.text.strip()
3. Localizar e extrair a classificação do produto
Para extrair a classificação do produto, é necessário aceder ao atributo title do seletor #acrPopover:
rating_element = soup.select_one('#acrPopover')
rating_text = rating_element.attrs.get('title')
rating = rating_text.replace('out of 5 stars', '')
4. Localizar e extrair o preço do produto
Extraia o preço do produto utilizando o seletor #price_inside_buybox:
price_element = soup.select_one('#price_inside_buybox')
print(price_element.text)
5. Localizar e extrair a imagem do produto
Recupere o URL da imagem padrão utilizando o seletor #landingImage:
image_element = soup.select_one('#landingImage')
image = image_element.attrs.get('src')
6. Localizar e extrair a descrição do produto
Recupere a descrição do produto utilizando o seletor #productDescription:
description_element = soup.select_one('#productDescription')
print(description_element.text)
7. Localizar e extrair as avaliações do produto
Extrair avaliações é mais complexo, uma vez que um produto pode ter várias avaliações. Uma única avaliação pode conter várias informações, como autor, classificação, título, conteúdo, data e estado de verificação.
Recolher avaliações
Utilize o seletor div.review para identificar e recolher todas as avaliações:
review_elements = soup.select("div.review")
scraped_reviews = []
for review in review_elements:
# Extracting specific review details...
Extrair detalhes das avaliações
Cada avaliação pode ser dividida em detalhes específicos:
- Autor: span.a-profile-name
- Classificação: i.review-rating
- Título: a.review-title > span:not([class])
- Conteúdo: span.review-text
- Data: span.review-date
- Estado verificado: span.a-size-mini
Cada um destes elementos pode ser selecionado utilizando os respetivos seletores CSS e, em seguida, extraído utilizando métodos semelhantes aos passos anteriores.
Reunir os dados da avaliação
Crie um objeto contendo os detalhes da avaliação extraídos e acrescente-o à matriz de avaliações:
r = {
"author": r_author,
"rating": r_rating,
"title": r_title,
"content": r_content,
"date": r_date,
"verified": r_verified
}
scraped_reviews.append(r)
A extração de dados de produtos da Amazon é uma tarefa multifacetada que requer uma abordagem precisa para identificar elementos específicos dentro da estrutura da página web. Ao tirar partido das capacidades das modernas ferramentas de web scraping, é possível extrair com sucesso informações detalhadas sobre os produtos.
Tratamento da lista de produtos
Para extrair informações detalhadas sobre produtos, começará frequentemente por uma lista de produtos ou página de categoria, onde os produtos são apresentados numa grelha ou numa vista de lista.
Identificar links de produtos
Numa página de categoria, poderá notar que cada produto está contido num div com um atributo específico [data-asin]. Os links para produtos individuais encontram-se frequentemente dentro de uma tag h2 dentro deste div.
O seletor CSS correspondente a estes links seria:
[data-asin] h2 a
Analisar e seguir links
Pode utilizar o BeautifulSoup para selecionar estes links e extrair os atributos href. Note que estes links podem ser relativos, pelo que deverá utilizar o método urljoin para os converter em URLs absolutas.
from urllib.parse import urljoin
def parse_listing(listing_url):
# Your code to fetch and parse the page goes here...
link_elements = soup_search.select("[data-asin] h2 a")
page_data = []
for link in link_elements:
full_url = urljoin(listing_url, link.attrs.get("href"))
product_info = get_product_info(full_url)
page_data.append(product_info)
Lidar com a paginação
Muitas páginas de listagem são paginadas. Pode navegar para a página seguinte localizando o link que contém o texto «Next».
next_page_el = soup.select_one('a:contains("Next")')
if next_page_el:
next_page_url = next_page_el.attrs.get('href')
next_page_url = urljoin(listing_url, next_page_url)
Pode então utilizar este URL para analisar a página seguinte, continuando o ciclo até não haverem mais links «Seguinte».
8. Exportar dados de produtos extraídos para um ficheiro JSON
Os dados de produtos extraídos estão a ser recolhidos como dicionários dentro de uma lista. Este formato permite uma fácil conversão para um DataFrame do Pandas, facilitando a manipulação e exportação de dados.
Veja como pode criar um DataFrame a partir dos dados extraídos e guardá-lo como um ficheiro JSON:
import pandas as pd
df = pd.DataFrame(page_data)
df.to_json('baby.json', orient='records')
Isto irá criar um ficheiro JSON contendo todas as informações dos produtos extraídos.
Este guia fornece um passo a passo sobre como extrair listagens de produtos, incluindo a navegação pela paginação e a exportação dos resultados para um ficheiro JSON. É essencial adaptar estes métodos à estrutura e aos requisitos específicos do site que está a extrair.