Wie man E-Commerce-Websites mit Python scrapen kann

Bemerkungen: 0

Das Scraping von E-Commerce-Daten nach Produktdetails ist nützlich für die Durchführung von Wettbewerbsanalysen, die Preisüberwachung und die Durchführung von Marktforschung. Das Scraping von Daten aus Produktseiten kann bequem mit Python durchgeführt werden. Dieses Ecommerce-Scraping-Tutorial zeigt Ihnen, wie Sie mit einer Kombination aus Anfragen und lxml Informationen aus Online-Shops sammeln können.

Beim Scraping von Webseiten für den elektronischen Handel geht es darum, Produktinformationen wie Titel, Preis oder Identifikationsnummer von Shops im Internet zu erhalten. Die zahlreichen in Python verfügbaren Bibliotheken machen dies nicht nur einfach, sondern auch ziemlich effizient. In diesem Artikel werden wir uns auf das Web-Scraping von E-Commerce-Webseiten mit Python konzentrieren. Die Website von Costco wird unser Objekt sein.

Schreiben eines Skripts für Ecommerce Data Scraping

Stellen wir zunächst sicher, dass wir alle verfügbaren Python-Tools oder -Bibliotheken für das Scraping von E-Commerce haben, die wir für dieses Skript benötigen:


pip install requests
pip install lxml

Wir werden uns darauf konzentrieren, Produktnamen, Merkmale und Marken von bestimmten Seiten der Website zu extrahieren.

Schritt 1. Verstehen der HTML-Struktur der Website

Um mit der Erstellung eines E-Commerce-Produktscrapers zu beginnen, müssen Sie zunächst verstehen, wie eine bestimmte Webseite aufgebaut ist. Gehen Sie auf die Website und öffnen Sie die Seite, von der Sie Informationen sammeln möchten, und prüfen Sie die erforderlichen Elemente (z. B. Produktname, Merkmale, Marke usw.).

Schritt 2. Senden von HTTP-Anfragen

Zunächst importieren wir die requests-Bibliothek, um GET speziell für die Produktseiten zu senden. Außerdem werden wir die Anforderungs-Header so konfigurieren, dass sie einer Browser-Anforderung ähneln.


import requests

# Liste der Produkt-URLs zum Scrapen
urls = [
    "https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
    "https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]

headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-US,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
    'sec-ch-ua-mobile': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}

# Schleife durch jede URL und Senden einer GET-Anfrage
for url in urls:
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        html_content = response.text
        # Die weitere Verarbeitung erfolgt in den nachfolgenden Schritten
    else:
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Schritt 3. Extrahieren von Daten mit XPath und lxml

Mit lxml extrahieren wir die gewünschten Informationen aus der HTML-Datei. Das ist wichtig, wenn es um das Scraping von E-Commerce-Daten geht.


from lxml import html

# Liste zum Speichern der ausgewerteten Daten
scraped_data = []

# Schleife durch jede URL und Senden einer GET-Anfrage
for url in urls:
    response = requests.get(url)
    if response.status_code == 200:
        html_content = response.content
        # Parsen von HTML-Inhalt mit lxml
        tree = html.fromstring(html_content)
        
       # Daten mit XPath extrahieren
        product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
        product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
        product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
        
        # Extrahierte Daten an die Liste anhängen
        scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
    else:
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

# Drucken der ausgewerteten Daten
for item in scraped_data:
    print(item)

Schritt 4. Mögliche Probleme angehen

Wenn wir versuchen, eine E-Commerce-Website mit Python zu scrapen, müssen wir uns darüber im Klaren sein, dass die meisten Websites über irgendeine Form von Anti-Bot-Software verfügen. Die Verwendung von Proxys und rotierenden User-Agents kann helfen, ihren Verdacht zu zerstreuen.

Verwendung von Proxys mit IP-Autorisierung:


proxies = {
    'http': 'http://your_proxy_ip:your_proxy_port',
    'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)

Rotierende Benutzer-Agenten:


import random

user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    # Bei Bedarf weitere User Agents hinzufügen
]

headers['user-agent'] = random.choice(user_agents)

response = requests.get(url, headers=headers)

Schritt 5. Speichern der Daten in einer CSV-Datei

Am Ende werden die extrahierten Daten in einem CSV-Format gespeichert, damit ich sie später für ein fortgeschrittenes E-Commerce-Data-Scraping-Verfahren analysieren kann.


import csv

csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']

# Daten in eine CSV-Datei schreiben
try:
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        writer.writeheader()
        for item in scraped_data:
            writer.writerow(item)
    print(f"Data saved to {csv_file}")
except IOError:
    print(f"Error occurred while writing data to {csv_file}")

Vollständiger Code

Hier ist die endgültige Version des Skripts für das effektive Scraping von E-Commerce-Daten. Man kann es zur einfachen Verwendung kopieren und einfügen.


import requests
import urllib3
from lxml import html
import csv
import random
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()

# Liste der Produkt-URLs zum Scrapen
urls = [
   "https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
   "https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]

# headers
headers = {
   'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
   'accept-language': 'en-US,en;q=0.9',
   'cache-control': 'no-cache',
   'dnt': '1',
   'pragma': 'no-cache',
   'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
   'sec-ch-ua-mobile': '?0',
   'sec-fetch-dest': 'document',
   'sec-fetch-mode': 'navigate',
   'sec-fetch-site': 'same-origin',
   'sec-fetch-user': '?1',
   'upgrade-insecure-requests': '1',
   'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}

# Liste der Benutzeragenten für rotierende Anfragen
user_agents = [
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   # Bei Bedarf weitere User Agents hinzufügen
]


# Liste der Bevollmächtigten für Rotationsanfragen
proxies = [
    {'http': 'http://your_proxy_ip:your_proxy_port', 'https': 'https://your_proxy_ip:your_proxy_port'},
    {'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
    # Bei Bedarf weitere Proxys hinzufügen
]

# Liste zum Speichern der ausgewerteten Daten
scraped_data = []

# Schleife durch jede URL und Senden einer GET-Anfrage
for url in urls:
   # Wählen Sie einen zufälligen Benutzer-Agenten für die Kopfzeilen der Anfrage
   headers['user-agent'] = random.choice(user_agents)
   # Wählen Sie einen zufälligen Proxy für die Anfrage
   proxy = random.choice(proxies)

   # HTTP-GET-Anfrage an die URL mit Headern und Proxy senden
   response = requests.get(url, headers=headers, proxies=proxy, verify=False)
   if response.status_code == 200:
       # Speichern Sie den HTML-Inhalt der Antwort
       html_content = response.content
       # Parsen von HTML-Inhalt mit lxml
       tree = html.fromstring(html_content)

       # Daten mit XPath extrahieren
       product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
       product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
       product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()

       # Extrahierte Daten an die Liste anhängen
       scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
   else:
       # Fehlermeldung ausgeben, wenn die Anfrage fehlschlägt
       print(f"Failed to retrieve {url}. Status code: {response.status_code}")

# CSV-Datei einrichten
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']

# Daten in eine CSV-Datei schreiben
try:
   with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
       writer = csv.DictWriter(file, fieldnames=fieldnames)
       writer.writeheader()
       for item in scraped_data:
           writer.writerow(item)
   print(f"Data saved to {csv_file}")
except IOError:
   # Fehlermeldung ausgeben, wenn das Schreiben in eine Datei fehlschlägt
   print(f"Error occurred while writing data to {csv_file}")

Python ecommerce scraper ist jetzt vollständig.

Scraping von E-Commerce-Daten: Abschließende Überlegungen

Der Einsatz eines E-Commerce-Web-Scrapers für den Costco-Onlineshop zeigt, wie effektiv Python bei der Beschaffung von Produktdaten für Analysen und optimale Geschäftsentscheidungen sein kann. Mit den richtigen Skripten und Bibliotheken Requests und Lxml zur Bereitstellung automatisierter Extraktoren ist es möglich, die Website zu scrapen, ohne dass der Arbeitsablauf durch eine Anti-Bot-API unterbrochen wird. Schließlich ist es wichtig, dass bei der Durchführung von E-Commerce-Web-Scraping stets die ethischen Vorschriften eingehalten werden.

Bemerkungen:

0 Bemerkungen