Business intelligence, investigação e análise são apenas algumas das infinitas possibilidades disponibilizadas pela recolha de dados da Web. Uma entidade comercial de pleno direito como a Walmart fornece uma estrutura perfeita para recolhermos as informações necessárias. Podemos facilmente extrair dados da Walmart, como o nome, o preço e as informações de avaliação dos seus inúmeros sítios Web, utilizando várias técnicas de extração.
Neste artigo, vamos explicar o processo de: como extrair dados do Walmart. Utilizaremos requests para enviar pedidos HTTP e lxml para analisar os documentos HTML devolvidos.
Quando se trata de extrair dados de produtos em vários sites de retalho, o Python está entre as opções mais eficazes disponíveis. Eis como se integra perfeitamente em projectos de extração:
A utilização deste tipo de linguagem para projectos no sector do retalho não só descomplica o aspeto técnico, como também aumenta a eficiência e o âmbito da análise, tornando-a a escolha principal para os especialistas que pretendem obter um conhecimento profundo do mercado. Estes aspectos podem ser especialmente úteis quando se decide recolher dados do Walmart.
Agora, vamos começar com a construção de uma ferramenta de raspagem da Web do Walmart.
Para começar, certifique-se de que o Python está instalado no seu computador. As bibliotecas necessárias podem ser descarregadas utilizando pip:
pip install requests
pip install lxml
pip install urllib3
Agora vamos importar bibliotecas como:
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
A lista de URLs de produtos para extrair dados do Walmart pode ser adicionada desta forma.
product_urls = [
'link with https',
'link with https',
'link with https'
]
Ao fazer web scraping no Walmart, é crucial apresentar os cabeçalhos HTTP corretos, especialmente o cabeçalho User-Agent, de modo a imitar um browser real. Além disso, os sistemas anti-bot do site também podem ser contornados usando servidores proxy rotativos. No exemplo abaixo, as cadeias de caracteres User-Agent são apresentadas juntamente com instruções para adicionar a autorização do servidor proxy por endereço IP.
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
proxy = [
'<ip>:<port>',
'<ip>:<port>',
'<ip>:<port>',
]
Os cabeçalhos dos pedidos devem ser definidos de forma a disfarçá-los como provenientes do browser de um utilizador. Isso ajudará muito ao tentar extrair dados do Walmart. Aqui está um exemplo de como isso ficaria:
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'dnt': '1',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
O primeiro passo é criar uma estrutura que aceite informações sobre o produto.
product_details = []
A enumeração de páginas URL funciona da seguinte forma: Para cada página URL, é iniciado um pedido GET com um User-Agent e um proxy escolhidos aleatoriamente. Depois de ser devolvida uma resposta HTML, esta é analisada para obter os pormenores do produto, incluindo o nome, o preço e as avaliações. Os pormenores relevantes são guardados na estrutura de dados do dicionário, que é posteriormente adicionada à lista criada anteriormente.
for url in product_urls:
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': f'http://{random.choice(proxy)}',
'https': f'http://{random.choice(proxy)}',
}
try:
# Enviar um pedido HTTP GET para o URL
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
print(response.status_code)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f'Error fetching data: {e}')
# Analisar o conteúdo HTML utilizando lxml
parser = html.fromstring(response.text)
# Extrair o título do produto
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# Extrair o preço do produto
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# Extrair detalhes da revisão
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# Armazenar detalhes extraídos num dicionário
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# Anexar detalhes do produto à lista
product_details.append(product_detail)
Título:
Preço:
Detalhes da revisão:
with open('walmart_products.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'price', 'review_details']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for product_detail in product_details:
writer.writerow(product_detail)
Quando o web scraping Walmart, o script completo do Python será parecido com o fornecido abaixo. Também há alguns comentários para facilitar a compreensão de cada secção.
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Lista de URLs de produtos para extrair dados do Walmart
product_urls = [
'link with https',
'link with https',
'link with https'
]
# Cadeias de caracteres User-Agent aleatórias para anonimato
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
# Lista de proxy para rotação de IP
proxy = [
'<ip>:<port>',
'<ip>:<port>',
'<ip>:<port>',
]
# Cabeçalhos para imitar os pedidos do browser
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'dnt': '1',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
# Inicializar uma lista vazia para armazenar os detalhes do produto
product_details = []
# Percorrer cada URL de produto
for url in product_urls:
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': f'http://{random.choice(proxy)}',
'https': f'http://{random.choice(proxy)}',
}
try:
# Enviar um pedido HTTP GET para o URL
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
print(response.status_code)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f'Error fetching data: {e}')
# Analisar o conteúdo HTML utilizando lxml
parser = html.fromstring(response.text)
# Extrair o título do produto
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# Extrair o preço do produto
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# Extrair detalhes da revisão
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# Armazenar detalhes extraídos num dicionário
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# Anexar detalhes do produto à lista
product_details.append(product_detail)
# Escrever os dados extraídos para um ficheiro CSV
with open('walmart_products.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'price', 'review_details']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for product_detail in product_details:
writer.writerow(product_detail)
Para aqueles que usam Python para fazer interface com a API de raspagem do Walmart, é crucial desenvolver métodos robustos que efetivamente raspem os preços do Walmart e os resultados das avaliações do Walmart. Esta API fornece um canal direto para dados extensivos de produtos, facilitando a análise em tempo real dos preços e do feedback dos clientes.
A utilização destas estratégias específicas aumenta a precisão e o âmbito das informações recolhidas, permitindo que as empresas se adaptem rapidamente às alterações do mercado e às tendências dos consumidores. Através da aplicação estratégica da API da Walmart em Python, as empresas podem otimizar os seus processos de recolha de dados, garantindo uma análise de mercado abrangente e uma tomada de decisões informada.
Neste tutorial, explicámos como utilizar as bibliotecas Python para extrair dados do Walmart e guardá-los num ficheiro CSV para análise posterior. O script fornecido é básico e serve como um ponto de partida que pode ser modificado para melhorar a eficiência do processo de recolha de dados. As melhorias podem incluir a adição de intervalos de tempo aleatórios entre os pedidos para simular a navegação humana, a utilização de agentes de utilizador e proxies para mascarar o bot e a implementação de um tratamento de erros avançado para lidar com interrupções ou falhas na recolha de dados.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0