L'obtention d'informations auprès de détaillants en ligne tels qu'AliExpress peut s'avérer très utile pour la collecte d'informations sur les produits, le suivi des fluctuations de prix, la collecte d'avis, etc. Dans cet article, nous allons explorer le processus d'acquisition d'informations sur les produits (telles que le nom, le prix, l'évaluation, etc.) ainsi que la collecte d'avis sur les produits. Nous montrerons également comment rendre le scraper dynamique en lui transmettant l'URL du produit, en récupérant automatiquement l'ID du produit et en enregistrant les données dans un fichier CSV.
Ce tutoriel utilise Playwright pour rendre le contenu dynamique et les requêtes pour récupérer les données d'examen. Nous nous assurerons également que le scraper est éthique et conforme aux meilleures pratiques.
Avant de commencer, assurez-vous que les bibliothèques Python suivantes sont installées :
Vous pouvez installer ces paquets en exécutant les commandes suivantes :
# Installer Playwright
pip install playwright
# Installer Requests
pip install requests
# Installer lxml pour l'analyse du HTML
pip install lxml
# Installer Pandas pour la manipulation et l'enregistrement des données
pip install pandas
Après avoir installé Playwright, vous devrez également installer les binaires requis pour le navigateur :
playwright install
Cela permettra de télécharger et d'installer le navigateur nécessaire au bon fonctionnement de Playwright.
Les pages de produits AliExpress sont dynamiques, ce qui signifie qu'elles chargent du contenu via JavaScript. Pour gérer cela, nous allons utiliser Playwright, une bibliothèque Python qui permet de contrôler un navigateur sans tête et d'interagir avec du contenu dynamique.
Voici comment envoyer une requête et naviguer vers la page du produit :
from playwright.async_api import async_playwright
async def get_page_content(url):
async with async_playwright() as p:
# Lancer le navigateur avec un proxy si nécessaire (peut être supprimé si le proxy n'est pas utilisé)
browser = await p.firefox.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto(url, timeout=60000)
# Extraire le contenu de la page
content = await page.content()
await browser.close()
return content
# Exemple d'URL
url = 'https://www.aliexpress.com/item/3256805354456256.html'
Une fois que nous avons le contenu de la page, nous pouvons extraire les données du produit à l'aide de requêtes lxml et XPath. Nous recueillerons des détails tels que le titre du produit, le prix, l'évaluation, le nombre d'avis et le nombre d'articles vendus.
from lxml.html import fromstring
def extract_product_data(content):
parser = fromstring(content)
# Extraire les détails d'un produit à l'aide de 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
Ce code utilise XPath pour extraire les détails pertinents du produit à partir du contenu HTML de la page.
AliExpress dispose d'un point de terminaison API distinct pour l'obtention d'avis sur les produits. Vous pouvez extraire l'ID du produit de l'URL de manière dynamique et l'utiliser pour récupérer les avis via des requêtes. Dans cette fonction :
import requests
def extract_product_id(url):
# Extraire l'identifiant du produit de l'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']
# Extraire uniquement le texte de l'examen
review_texts = [review['buyerFeedback'] for review in reviews]
return review_texts
Après avoir récupéré les détails et les avis sur les produits, nous enregistrons ces données dans un fichier CSV à l'aide de la bibliothèque pandas.
import pandas as pd
def save_to_csv(product_data, reviews, product_id):
# Enregistrer les détails du produit au format CSV
df_product = pd.DataFrame([product_data])
df_product.to_csv(f'product_{product_id}_data.csv', index=False)
# Enregistrer les commentaires au format 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}.")
Les détails du produit et les commentaires sont enregistrés dans des fichiers CSV distincts avec l'identifiant du produit inclus dans le nom du fichier pour faciliter l'identification.
Voici comment fonctionne le flux de travail dynamique complet :
# Extraire l'identifiant du produit de l'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
# Obtenir le contenu de la page à l'aide de 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
# Extraire des données sur les produits
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
}
# Extraire l'identifiant du produit de l'URL
def extract_product_id(url):
return url.split('/')[-1].split('.')[0]
# Récupérer les avis
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]
# Enregistrer les données et les commentaires sur les produits au format 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')
# Fonction principale
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)
# Faire fonctionner le grattoir
import asyncio
url = 'https://www.aliexpress.com/item/3256805354456256.html'
asyncio.run(main(url))
Lors du scraping de données, il est important de respecter des règles éthiques :
En suivant ces conseils, vous pourrez faire du scrape de manière éthique et responsable, en minimisant les risques pour les utilisateurs et le système AliExpress.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0