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.
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.
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.).
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}")
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)
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)
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}")
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.
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.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0