Descubrir información de minoristas electrónicos como AliExpress puede ser muy beneficioso para recopilar información sobre productos, controlar las fluctuaciones de precios, recopilar reseñas, etc. En este artículo, exploraremos el proceso de adquisición de información sobre productos (como nombre, precio, valoración, etc.) y también revisaremos el raspado de reseñas de productos. También demostraremos cómo hacer que el scraper sea dinámico pasando la URL del producto, recuperando automáticamente el ID del producto y guardando los datos en un archivo CSV.
Este tutorial utilizará Playwright para generar contenido dinámico y peticiones para obtener datos de reseñas. También nos aseguraremos de que el scraper es ético y cumple con las mejores prácticas.
Antes de empezar, asegúrate de tener instaladas las siguientes librerías de Python:
Puede instalar estos paquetes ejecutando los siguientes comandos:
# Instalar dramaturgo
pip install playwright
# Solicitudes de instalación
pip install requests
# Instalar lxml para analizar HTML
pip install lxml
# Instalar Pandas para manipular y guardar datos
pip install pandas
Después de instalar Playwright, también tendrá que instalar los binarios necesarios del navegador:
playwright install
Esto descargará y configurará el navegador necesario para que Playwright funcione correctamente.
Las páginas de productos de AliExpress son dinámicas, es decir, cargan contenido a través de JavaScript. Para manejar esto, usaremos Playwright, una librería de Python que permite controlar un navegador headless e interactuar con contenido dinámico.
Así es como puedes enviar una petición y navegar a la página del producto:
from playwright.async_api import async_playwright
async def get_page_content(url):
async with async_playwright() as p:
# Iniciar el navegador con un proxy si es necesario (puede eliminarse si no se utiliza proxy)
browser = await p.firefox.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto(url, timeout=60000)
# Extraer el contenido de la página
content = await page.content()
await browser.close()
return content
# Ejemplo de URL
url = 'https://www.aliexpress.com/item/3256805354456256.html'
Una vez que tenemos el contenido de la página, podemos extraer los datos del producto usando lxml y consultas XPath. Recopilaremos detalles como el título del producto, el precio, la valoración, el número de reseñas y el número de artículos vendidos.
from lxml.html import fromstring
def extract_product_data(content):
parser = fromstring(content)
# Extraer detalles de productos mediante XPath
title = parser.xpath('//h1[@data-pl="product-title"]/text()')[0].strip()
price = parser.xpath('//div[@class="price--current--I3Zeidd product-price-current"]/span/text()')[0].strip()
rating = ' '.join(parser.xpath('//a[@class="reviewer--rating--xrWWFzx"]/strong/text()')).strip()
total_reviews = parser.xpath('//a[@class="reviewer--reviews--cx7Zs_V"]/text()')[0].strip()
sold_count = parser.xpath('//span[@class="reviewer--sold--ytPeoEy"]/text()')[0].strip()
product_data = {
'title': title,
'price': price,
'rating': rating,
'total_reviews': total_reviews,
'sold_count': sold_count
}
return product_data
Este código utiliza XPath para extraer detalles relevantes del producto del contenido HTML de la página.
AliExpress tiene un punto final de API independiente para obtener reseñas de productos. Puedes extraer el ID del producto de la URL dinámicamente y usarlo para obtener revisiones a través de solicitudes. En esta función:
import requests
def extract_product_id(url):
# Extraer el ID del producto de la URL
product_id = url.split('/')[-1].split('.')[0]
return product_id
def scrape_reviews(product_id, page_num=1, page_size=10):
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'en-IN,en;q=0.9',
'referer': f'https://www.aliexpress.com/item/{product_id}.html',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
params = {
'productId': product_id,
'lang': 'en_US',
'country': 'US',
'page': str(page_num),
'pageSize': str(page_size),
'filter': 'all',
'sort': 'complex_default',
}
response = requests.get('https://feedback.aliexpress.com/pc/searchEvaluation.do', params=params, headers=headers)
reviews = response.json()['data']['evaViewList']
# Extraer sólo texto de revisión
review_texts = [review['buyerFeedback'] for review in reviews]
return review_texts
Después de raspar los detalles del producto y las revisiones, guardamos estos datos en un archivo CSV utilizando la biblioteca pandas.
import pandas as pd
def save_to_csv(product_data, reviews, product_id):
# Guardar detalles del producto en CSV
df_product = pd.DataFrame([product_data])
df_product.to_csv(f'product_{product_id}_data.csv', index=False)
# Guardar reseñas en CSV
df_reviews = pd.DataFrame({'reviews': reviews})
df_reviews.to_csv(f'product_{product_id}_reviews.csv', index=False)
print(f"Data saved for product {product_id}.")
Los detalles del producto y las reseñas se guardan en archivos CSV independientes con el ID del producto incluido en el nombre del archivo para facilitar su identificación.
Así es como funciona el flujo de trabajo dinámico completo:
# Extraer el ID del producto de la URL
def extract_product_id(url):
return url.split('/')[-1].split('.')[0]
from playwright.async_api import async_playwright
from lxml.html import fromstring
import requests
import pandas as pd
# Obtener el contenido de la página con Playwright
async def get_page_content(url):
async with async_playwright() as p:
browser = await p.firefox.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto(url, timeout=60000)
content = await page.content()
await browser.close()
return content
# Extraer datos de productos
def extract_product_data(content):
parser = fromstring(content)
title = parser.xpath('//h1[@data-pl="product-title"]/text()')[0].strip()
price = parser.xpath('//div[@class="price--current--I3Zeidd product-price-current"]/span/text()')[0].strip()
rating = ' '.join(parser.xpath('//a[@class="reviewer--rating--xrWWFzx"]/strong/text()')).strip()
total_reviews = parser.xpath('//a[@class="reviewer--reviews--cx7Zs_V"]/text()')[0].strip()
sold_count = parser.xpath('//span[@class="reviewer--sold--ytPeoEy"]/text()')[0].strip()
return {
'title': title,
'price': price,
'rating': rating,
'total_reviews': total_reviews,
'sold_count': sold_count
}
# Extraer el ID del producto de la URL
def extract_product_id(url):
return url.split('/')[-1].split('.')[0]
# Revisiones de raspado
def scrape_reviews(product_id, page_num=1, page_size=10):
headers = {
'accept': 'application/json, text/plain, */*',
'referer': f'https://www.aliexpress.com/item/{product_id}.html',
'user-agent': 'Mozilla/5.0'
}
params = {
'productId': product_id,
'lang': 'en_US',
'page': str(page_num),
'pageSize': str(page_size),
}
response = requests.get('https://feedback.aliexpress.com/pc/searchEvaluation.do', params=params, headers=headers)
reviews = response.json()['data']['evaViewList']
return [review['buyerFeedback'] for review in reviews]
# Guardar datos de productos y reseñas en CSV
def save_to_csv(product_data, reviews, product_id):
pd.DataFrame([product_data]).to_csv(f'product_{product_id}_data.csv', index=False)
pd.DataFrame({'reviews': reviews}).to_csv(f'product_{product_id}_reviews.csv', index=False)
print(f'Saved into: product_{product_id}_data.csv')
print(f'Saved into: product_{product_id}_reviews.csv')
# Función principal
async def main(url):
content = await get_page_content(url)
product_data = extract_product_data(content)
product_id = extract_product_id(url)
reviews = scrape_reviews(product_id)
save_to_csv(product_data, reviews, product_id)
# Ejecutar el rascador
import asyncio
url = 'https://www.aliexpress.com/item/3256805354456256.html'
asyncio.run(main(url))
Al hacer scraping de datos, es importante seguir unas pautas éticas:
Seguir estas directrices te ayudará a hacer scraping de forma ética y responsable, minimizando los riesgos tanto para los usuarios como para el sistema de AliExpress.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentarios: 0