Für Wettbewerbsanalysen, Preisüberwachung und Marktforschung ist es wichtig, Produktdaten von E-Commerce-Websites abzurufen. Sie können Python verwenden, um Daten von Produktseiten effizient abzurufen. In diesem Leitfaden wird gezeigt, wie man mit einer Kombination aus Anfragen und lxml Produktdaten aus Online-Shops auslesen kann.
Beim E-Commerce Scraping geht es darum, Produktdetails wie Namen, Preise und IDs aus Online-Shops zu extrahieren. Python mit seinen vielseitigen Bibliotheken macht diese Aufgabe effizient und einfach. In diesem Leitfaden werden wir Produktinformationen von der Costco-Website abrufen.
Bevor Sie mit dem Scraping beginnen, sollten Sie sicherstellen, dass Sie die notwendigen Python-Bibliotheken installiert haben:
pip install requests
pip install lxml
Wir konzentrieren uns auf die Extraktion von Produktnamen, Produktmerkmalen und Produktmarken aus bestimmten Produktseiten auf der Website.
Um Daten von einer beliebigen Website zu extrahieren, müssen Sie die Struktur der Webseite verstehen. Öffnen Sie eine Webseite und sehen Sie sich die Elemente an, die Sie auslesen möchten (z. B. Produktname, Merkmale, Marke usw.).
Zunächst verwenden wir die requests-Bibliothek, um HTTP-GET-Anfragen an die Produktseiten zu senden. Außerdem werden wir die Header der Anfragen so einrichten, dass sie eine echte Browseranfrage imitieren.
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 benötigten Datenpunkte aus dem geparsten HTML.
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)
Websites setzen häufig Anti-Bot-Maßnahmen ein. Die Verwendung von Proxys und rotierenden Benutzer-Agenten kann helfen, eine Entdeckung zu vermeiden.
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)
Abschließend speichern wir die gescrapten Daten in einer CSV-Datei zur weiteren Analyse.
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}")
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"
]
# Kopfzeilen
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',
# Add more user agents as needed
]
# 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'},
# Add more proxies as needed
]
# 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 Header 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:
# Print error message if request fails
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}")
Die Verwendung von Python zum Scrapen von E-Commerce-Seiten wie Costco ist eine effektive Methode zum Sammeln von Produktinformationen, um diese zu analysieren und strategische Entscheidungen zu treffen. Die richtige Verwendung von Bibliotheken wie Requests und Lxml führt zu automatisierten Extraktionsprozessen, die HTML-Inhalte verarbeiten können, ohne dabei die Implementierung einer effektiven Anti-Bot-API zu vergessen. Es ist zu beachten, dass ethische Scraping-Protokolle immer befolgt werden müssen.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.ru!
Bemerkungen: 0