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.
Bevor wir beginnen, stellen Sie sicher, dass Sie die folgenden Python-Bibliotheken installiert haben:
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.
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'
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.
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:
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
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.
So funktioniert der komplette dynamische Arbeitsablauf:
# Produkt-ID aus der URL extrahieren
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
# 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))
Beim Scrapen von Daten ist es wichtig, ethische Richtlinien zu befolgen:
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.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0