Wie man AliExpress-Daten mit Python abgreift

Bemerkungen: 0

Das Aufspüren von Informationen von Online-Händlern wie AliExpress kann für die Erfassung von Produktinformationen, die Überwachung von Preisschwankungen, das Sammeln von Bewertungen usw. sehr nützlich sein. In diesem Artikel werden wir den Prozess der Erfassung von Produktinformationen (wie Name, Preis, Bewertung usw.) und das Scrapen von Produktbewertungen untersuchen. Außerdem wird gezeigt, wie man den Scraper dynamisch gestaltet, indem man die Produkt-URL übergibt, automatisch die Produkt-ID abruft und die Daten in einer CSV-Datei speichert.

In diesem Tutorial wird Playwright zum Rendern dynamischer Inhalte und zum Abrufen von Bewertungsdaten verwendet. Außerdem stellen wir sicher, dass der Scraper ethisch einwandfrei ist und den Best Practices entspricht.

Voraussetzungen

Bevor wir beginnen, stellen Sie sicher, dass Sie die folgenden Python-Bibliotheken installiert haben:

  • Playwright: wird verwendet, um mit dem Browser zu interagieren und dynamische Inhalte zu rendern.
  • Requests: zum Abrufen von Bewertungen über die AliExpress-API.
  • lxml: zum Parsen des HTML-Inhalts.
  • Pandas: wird verwendet, um die Daten in einer CSV-Datei zu speichern.

Sie können diese Pakete installieren, indem Sie die folgenden Befehle ausführen:


# Installieren Sie Playwright
pip install playwright


# Installieren Sie Requests
pip install requests


# lxml zum Parsen von HTML installieren
pip install lxml


# Installieren Sie Pandas zur Datenmanipulation und -speicherung
pip install pandas

Nach der Installation von Playwright müssen Sie auch die erforderlichen Browser-Binärdateien installieren:


playwright install

Dadurch wird der erforderliche Browser heruntergeladen und eingerichtet, damit Playwright ordnungsgemäß funktioniert.

Schritt 1. Senden von Anfragen mit Playwright

AliExpress-Produktseiten sind dynamisch, das heißt, sie laden Inhalte über JavaScript. Um dies zu bewerkstelligen, verwenden wir Playwright, eine Python-Bibliothek, mit der Sie einen Headless-Browser steuern und mit dynamischen Inhalten interagieren können.

So können Sie eine Anfrage senden und zur Produktseite navigieren:


from playwright.async_api import async_playwright

async def get_page_content(url):
    async with async_playwright() as p:
        # Starten des Browsers mit einem Proxy, falls erforderlich (kann entfernt werden, wenn kein Proxy verwendet wird)
        browser = await p.firefox.launch(
            headless=False,
            proxy={"server": '', 'username': '', 'password': ''}
        )
        page = await browser.new_page()
        await page.goto(url, timeout=60000)

        # Seiteninhalt extrahieren
        content = await page.content()
        await browser.close()
        
        return content

# Beispiel-URL
url = 'https://www.aliexpress.com/item/3256805354456256.html'

Schritt 2. Produktdaten extrahieren

Sobald wir den Seiteninhalt haben, können wir die Produktdaten mithilfe von lxml- und XPath-Abfragen extrahieren. Wir werden Details wie den Produkttitel, den Preis, die Bewertung, die Anzahl der Bewertungen und die Anzahl der verkauften Artikel sammeln.


from lxml.html import fromstring

def extract_product_data(content):
    parser = fromstring(content)
    
    # Produktdetails mit XPath extrahieren
    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


Dieser Code verwendet XPath, um relevante Produktdetails aus dem HTML-Inhalt der Seite zu extrahieren.

Schritt 3. Scraping von Produktbewertungen

AliExpress hat einen separaten API-Endpunkt zum Abrufen von Produktbewertungen. Sie können die Produkt-ID dynamisch aus der URL extrahieren und sie zum Abrufen von Bewertungen über Anfragen verwenden. In dieser Funktion:

  1. Die Produkt-ID wird dynamisch aus der Produkt-URL extrahiert.
  2. Wir holen die Bewertungen mithilfe der AliExpress-Bewertungs-API ab.
  3. Die Bewertungstexte werden extrahiert und als Liste zurückgegeben.

import requests

def extract_product_id(url):
    # Produkt-ID aus der URL extrahieren
    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']

    # Nur den Rezensionstext auslesen
    review_texts = [review['buyerFeedback'] for review in reviews]
    
    return review_texts

Schritt 4. Speichern der Daten in einer CSV-Datei

Nachdem wir die Produktdetails und -bewertungen gesammelt haben, speichern wir diese Daten mit Hilfe der Pandas-Bibliothek in einer CSV-Datei.


import pandas as pd

def save_to_csv(product_data, reviews, product_id):
    # Produktdaten in CSV speichern
    df_product = pd.DataFrame([product_data])
    df_product.to_csv(f'product_{product_id}_data.csv', index=False)

    # Bewertungen in CSV speichern
    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}.")

Die Produktdetails und Bewertungen werden in separaten CSV-Dateien gespeichert, wobei die Produkt-ID zur einfachen Identifizierung im Dateinamen enthalten ist.

Schritt 5. Dynamischer Abruf der Produkt-ID

So funktioniert der komplette dynamische Arbeitsablauf:

  1. Übergeben Sie eine beliebige AliExpress-Produkt-URL.
  2. Die Produkt-ID wird aus der URL extrahiert.
  3. Der Scraper holt sich Produktdaten und Bewertungen.
  4. Die Daten werden in CSV-Dateien gespeichert, die die Produkt-ID enthalten.

# Produkt-ID aus der URL extrahieren
def extract_product_id(url):
    return url.split('/')[-1].split('.')[0]

Endgültiger vollständiger Code


from playwright.async_api import async_playwright
from lxml.html import fromstring
import requests
import pandas as pd

# Seiteninhalt mit Playwright abrufen
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

# Produktdaten extrahieren
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
    }

# Produkt-ID aus der URL extrahieren
def extract_product_id(url):
    return url.split('/')[-1].split('.')[0]

# Bewertungen scrapen
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]

# Produktdaten und Bewertungen in CSV speichern
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')

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

# Den Abstreifer laufen lassen
import asyncio
url = 'https://www.aliexpress.com/item/3256805354456256.html'
asyncio.run(main(url))

Ethische Überlegungen

Beim Scrapen von Daten ist es wichtig, ethische Richtlinien zu befolgen:

  1. Beachten Sie die Nutzungsbedingungen von AliExpress: Prüfen Sie immer die Nutzungsbedingungen, bevor Sie eine Website scannen. Vermeiden Sie Verstöße gegen die Regeln, um nicht gesperrt zu werden.
  2. Drosseln Sie Ihre Anfragen: Wenn Sie zu viele Anfragen in kurzer Zeit senden, können die Server überlastet werden. Erwägen Sie, Verzögerungen zwischen den Anfragen einzufügen.
  3. Vermeiden Sie persönliche Daten: Sammeln oder sammeln Sie keine persönlichen Daten ohne die entsprechende Zustimmung.

Wenn Sie diese Richtlinien befolgen, können Sie auf ethische und verantwortungsvolle Weise scrapen und so die Risiken für die Nutzer und das AliExpress-System minimieren.

Bemerkungen:

0 Bemerkungen