La inteligencia empresarial, la investigación y el análisis son sólo algunas de las infinitas posibilidades que ofrece el web scraping. Una entidad empresarial de pleno derecho como Walmart nos proporciona una estructura perfecta para recopilar la información necesaria. Podemos raspar fácilmente datos de Walmart como el nombre, el precio y la información de reseñas de su multitud de sitios web utilizando diversas técnicas de raspado.
En este artículo vamos a desglosar el proceso de: cómo scrapear datos de Walmart. Usaremos requests para enviar peticiones HTTP y lxml para analizar los documentos HTML devueltos.
Cuando se trata de extraer datos de productos en varios sitios de venta al por menor, Python es una de las opciones más eficaces que existen. A continuación te explicamos cómo se integra a la perfección en los proyectos de extracción:
El uso de este tipo de lenguaje para proyectos en el sector minorista no sólo descomplica el aspecto técnico, sino que también aumenta la eficacia y el alcance del análisis, lo que lo convierte en la mejor opción para los expertos que desean obtener un conocimiento profundo del mercado. Estos aspectos pueden ser especialmente útiles cuando se decide extraer datos de Walmart.
Ahora, vamos a empezar con la construcción de una herramienta de raspado web Walmart.
Para empezar, asegúrese de que Python está instalado en su ordenador. Las bibliotecas necesarias se pueden descargar usando pip:
pip install requests
pip install lxml
pip install urllib3
Ahora vamos a importar bibliotecas como:
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
La lista de URL de productos para raspar los datos de Walmart se puede añadir así.
product_urls = [
'link with https',
'link with https',
'link with https'
]
Cuando se hace web scraping en Walmart, es crucial presentar las cabeceras HTTP correctas, especialmente la cabecera User-Agent, para imitar un navegador real. Además, los sistemas anti-bot del sitio también pueden eludirse utilizando servidores proxy rotativos. En el siguiente ejemplo, se presentan las cadenas User-Agent junto con las instrucciones para añadir la autorización del servidor proxy por dirección 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>',
]
Las cabeceras de las peticiones deben configurarse de forma que parezcan proceder del navegador del usuario. Ayudará mucho cuando se trate de scrapear datos de Walmart. Aquí hay un ejemplo de cómo se vería:
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',
}
El primer paso consiste en crear una estructura que acepte información sobre los productos.
product_details = []
La enumeración de páginas URL funciona de la siguiente manera: Para cada página URL, se inicia una solicitud GET con un User-Agent y un proxy elegidos al azar. Cuando se recibe una respuesta HTML, se analizan los detalles del producto, incluidos el nombre, el precio y las opiniones. Los detalles relevantes se guardan en la estructura de datos del diccionario, que posteriormente se añade a la lista creada previamente.
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 una solicitud HTTP GET a la 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}')
# Analiza el contenido HTML con lxml
parser = html.fromstring(response.text)
# Extraer el título del producto
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# Extraer el precio del producto
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# Detalles de la revisión de extractos
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# Almacenar los datos extraídos en un diccionario
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# Añadir detalles del producto a la lista
product_details.append(product_detail)
Título:
Precio:
Detalle de la revisión:
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)
Cuando web scraping Walmart, Python script completo se verá como el que se proporciona a continuación. Aquí también hay algunos comentarios para que sea más fácil para usted para entender cada sección.
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 URL de productos para raspar los datos de Walmart
product_urls = [
'link with https',
'link with https',
'link with https'
]
# Cadenas User-Agent aleatorias para el 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 la rotación de IP
proxy = [
'<ip>:<port>',
'<ip>:<port>',
'<ip>:<port>',
]
# Cabeceras para imitar las peticiones del navegador
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 una lista vacía para almacenar los detalles del producto
product_details = []
# Recorrer cada URL de producto
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 una solicitud HTTP GET a la 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}')
# Analiza el contenido HTML con lxml
parser = html.fromstring(response.text)
# Extraer el título del producto
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# Extraer el precio del producto
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# Detalles de la revisión de extractos
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# Almacenar los datos extraídos en un diccionario
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# Añadir detalles del producto a la lista
product_details.append(product_detail)
# Escribir los datos extraídos en un archivo 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 aquellos que utilizan Python para interactuar con la API de raspado de Walmart, es crucial desarrollar métodos robustos que raspen eficazmente los precios de Walmart y los resultados de las reseñas de Walmart. Esta API proporciona una vía directa a una gran cantidad de datos de productos, lo que facilita el análisis en tiempo real de los precios y las opiniones de los clientes.
El empleo de estas estrategias específicas mejora la precisión y el alcance de la información recopilada, lo que permite a las empresas adaptarse rápidamente a los cambios del mercado y a las tendencias de los consumidores. Mediante la aplicación estratégica de la API de Walmart en Python, las empresas pueden optimizar sus procesos de recopilación de datos, garantizando un análisis exhaustivo del mercado y una toma de decisiones informada.
En este tutorial, explicamos cómo utilizar las bibliotecas de Python para scrapear datos de Walmart y guardarlos en un archivo CSV para su posterior análisis. El script dado es básico, y sirve como punto de partida que puedes modificar para mejorar la eficiencia del proceso de scraping. Las mejoras pueden incluir la adición de intervalos de tiempo aleatorios entre las solicitudes para simular la navegación humana, el uso de usuarios-agentes y proxies para enmascarar el bot, y la implementación de la gestión avanzada de errores para hacer frente a las interrupciones o fallos de raspado.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentarios: 0