Comment récupérer les données d'AliExpress en utilisant Python

Commentaires: 0

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.

Nécessités

Avant de commencer, assurez-vous que les bibliothèques Python suivantes sont installées :

  • Playwright : utilisé pour interagir avec le navigateur et rendre le contenu dynamique.
  • Requests : utilisé pour récupérer les avis via l'API AliExpress.
  • lxml : pour analyser le contenu HTML.
  • Pandas : permet d'enregistrer les données dans un fichier CSV.

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.

Étape 1. Envoi de demandes avec 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'

Étape 2. Extraction des données sur les produits

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.

Étape 3. Extraction des avis sur les produits

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 :

  1. L'ID du produit est extrait de l'URL du produit de manière dynamique.
  2. Nous récupérons les avis à l'aide de l'API d'avis d'AliExpress.
  3. Les textes des avis sont extraits et renvoyés sous forme de liste.

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

Etape 4. Enregistrement des données dans un fichier CSV

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.

Étape 5. Récupération dynamique de l'ID du produit

Voici comment fonctionne le flux de travail dynamique complet :

  1. Passez n'importe quelle URL de produit AliExpress.
  2. L'identifiant du produit est extrait de l'URL.
  3. Le scraper récupère les données du produit et les commentaires.
  4. Les données sont enregistrées dans des fichiers CSV avec l'identifiant du produit.

# Extraire l'identifiant du produit de l'URL
def extract_product_id(url):
    return url.split('/')[-1].split('.')[0]

Code complet final


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))

Les considérations éthiques

Lors du scraping de données, il est important de respecter des règles éthiques :

  1. Respectez les conditions d'utilisation d'AliExpress : Vérifiez toujours les conditions d'utilisation avant de récupérer les données d'un site web. Évitez d'enfreindre les règles pour ne pas être banni.
  2. Réduisez vos demandes : L'envoi d'un trop grand nombre de demandes en peu de temps peut surcharger les serveurs. Envisagez d'espacer les requêtes.
  3. Évitez les données personnelles : Ne recueillez pas d'informations personnelles sans le consentement des personnes concernées.

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.

Commentaires:

0 Commentaires