Web Scraping ist eine leistungsfähige Methode, um Daten aus Websites für verschiedene Zwecke zu extrahieren, z. B. für Analyse, Forschung und Aufklärung in Unternehmen. Dieses Tutorial hilft Ihnen beim Scrapen von Walmart-Produktinformationen in Python, wobei der Schwerpunkt auf den wichtigsten Strategien und Techniken liegt. Walmart Scraping stellt ein Beispiel vor, in dem wir Details von Produkten wie Name, Preis oder Bewertungen auf verschiedenen Seiten der Walmart-Websites auslesen können.
In dieser Anleitung wird die requests-Bibliothek für HTTP-Anfragen und die lxml-Bibliothek für das Parsen von HTML-Inhalten verwendet.
Bevor wir beginnen, stellen Sie sicher, dass Sie Python auf Ihrem Rechner installiert haben. Sie können die benötigten Bibliotheken mit pip installieren:
pip install requests
pip install lxml
pip install urllib3
Als nächstes importieren wir die notwendigen Bibliotheken:
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
Liste von Walmart-Produkt-URLs zum Scrapen.
product_urls = [
'link with https',
'link with https',
'link with https'
]
Um eine Website zu scrapen, ist es sehr wichtig, die richtigen Header zu verwenden, insbesondere den User-Agent-Header, um eine Anfrage von einem echten Browser zu imitieren. Darüber hinaus kann man vermeiden, dass man durch Anti-Bot-Maßnahmen der Website-Besitzer eingeschränkt wird, indem man drehbare Proxy-Server einsetzt. Nachfolgend finden Sie Beispiele für User-Agent-Strings sowie eine Beschreibung, wie Sie Proxy-Server integrieren können, die eine Autorisierung auf der Grundlage der IP-Adresse erfordern.
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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
proxy = [
'<ip>:<port>',
'<ip>:<port>',
'<ip>:<port>',
]
Setzen Sie Kopfzeilen, um Browseranfragen zu imitieren und eine Erkennung zu vermeiden.
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-IN,en;q=0.9',
'dnt': '1',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
Erstellen Sie eine leere Liste, um Produktdaten zu speichern.
product_details = []
Der Aufzählungsprozess für URL-Seiten läuft folgendermaßen ab: Für jede URL-Seite wird eine GET-Anfrage mit einem zufällig ausgewählten User-Agent und Proxy gesendet. Nach Erhalt der HTML-Antwort wird diese geparst, um Details wie den Produktnamen, den Preis und die Bewertungen zu extrahieren. Die extrahierten Daten werden in einem Wörterbuch gespeichert, das anschließend an eine zuvor erstellte Liste angehängt wird.
for url in product_urls:
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': f'http://{random.choice(proxy)}',
'https': f'http://{random.choice(proxy)}',
}
try:
# Senden Sie eine HTTP-GET-Anfrage an die URL
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
print(response.status_code)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f'Error fetching data: {e}')
# Parsen des HTML-Inhalts mit lxml
parser = html.fromstring(response.text)
# Produkttitel extrahieren
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# Produktpreis extrahieren
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# Extract review details
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# Extrahierte Details in einem Wörterbuch speichern
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# Anhängen von Produktdetails an die Liste
product_details.append(product_detail)
Titel:
Preis:
Überprüfung Detail:
with open('walmart_products.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'price', 'review_details']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for product_detail in product_details:
writer.writerow(product_detail)
Hier ist der vollständige Code mit Kommentaren, damit Sie ihn besser verstehen:
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Liste der Produkt-URLs zum Scrapen
product_urls = [
'link with https',
'link with https',
'link with https'
]
# Zufallsgenerierte User-Agent-Zeichenfolgen für Anonymität
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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
# Proxy-Liste für IP-Rotation
proxy = [
'<ip>:<port>',
'<ip>:<port>',
'<ip>:<port>',
]
# Kopfzeilen zur Nachahmung von Browseranfragen
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-IN,en;q=0.9',
'dnt': '1',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
# Initialisierung einer leeren Liste zum Speichern von Produktdaten
product_details = []
# Schleife durch jede Produkt-URL
for url in product_urls:
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': f'http://{random.choice(proxy)}',
'https': f'http://{random.choice(proxy)}',
}
try:
# Senden Sie eine HTTP-GET-Anfrage an die URL
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
print(response.status_code)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f'Error fetching data: {e}')
# Parsen des HTML-Inhalts mit lxml
parser = html.fromstring(response.text)
# Produkttitel extrahieren
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# Produktpreis extrahieren
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# Auszug aus der Überprüfung
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# Extrahierte Details in einem Wörterbuch speichern
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# Anhängen von Produktdetails an die Liste
product_details.append(product_detail)
# Schreiben der extrahierten Daten in eine CSV-Datei
with open('walmart_products.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'price', 'review_details']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for product_detail in product_details:
writer.writerow(product_detail)
Unser Tutorial zeigt, wie man mit Hilfe von Python-Bibliotheken Produktdaten von Walmart ausliest und im CSV-Format für eine spätere Analyse speichert. Das bereitgestellte Skript ist grundlegend und bietet eine Basis, die verbessert werden kann, um die Effizienz des Scraping-Prozesses zu erhöhen. Zu den Verbesserungen gehören die Einführung zufälliger Verzögerungen zwischen den Anfragen, um das menschliche Surfverhalten zu imitieren, die Implementierung von User-Agent- und Proxy-Rotation, um eine Entdeckung zu vermeiden, und die Entwicklung eines robusten Fehlerbehandlungssystems, um mögliche Unterbrechungen oder Ausfälle beim Scraping zu verwalten.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0