eBay ist einer der größten Online-Marktplätze der Welt, auf dem Millionen von Produkten in verschiedenen Kategorien angeboten werden. Das Scraping von eBay kann von unschätzbarem Wert sein für Aufgaben wie:
In dieser Anleitung zeigen wir Ihnen, wie Sie ein einfaches Python-Skript erstellen, um nach einem Schlüsselwort zu suchen, Produktdetails wie Titel, Preis, Währung, Verfügbarkeit, Rezensionen und Bewertungen zu extrahieren und die Daten in einer CSV-Datei zu speichern. Dieses Tutorial eignet sich hervorragend für Anfänger, die Web Scraping auf die richtige Art und Weise erlernen möchten, mit Tipps zur Einhaltung von Nutzungsbedingungen und zur verantwortungsvollen Verwendung von Proxys.
Wenn Sie nur nach der vollständigen Implementierung suchen, finden Sie hier das komplette Python-Skript für das Auslesen von Produktdaten aus eBay unter Verwendung von Proxys. Kopieren Sie es und fügen Sie es in Ihre Umgebung ein, um loszulegen:
import re
import csv
import time
import requests
from bs4 import BeautifulSoup
proxies = {
"http": "http://username:[email protected]:6060",
"https": "http://username:[email protected]:6060",
}
def get_product_information(product_url) -> dict:
r = requests.get(product_url, proxies=proxies)
soup = BeautifulSoup(r.text, features="html.parser")
product_title = soup.find("h1", {"class": "x-item-title__mainTitle"}).text
product_price = soup.find("div", {"class": "x-price-primary"}).text.split(" ")[-1]
currency = soup.find("div", {"class": "x-price-primary"}).text.split(" ")[0]
# locate the element that holds quanity number of product
quantity_available = soup.find("div", {"class":"x-quantity__availability"})
if quantity_available is not None:
# Using regex check if we can locate the strings that holds this number
regex_pattern = r"\d+\savailable"
if re.search(regex_pattern, quantity_available.text) is not None:
quantity_available = re.search(regex_pattern, quantity_available.text).group()
# After string is located we extract the number by splitting it by space and selecting the first element.
quantity_available = quantity_available.split(" ")[0]
else:
quantity_available = "NA"
total_reviews = soup.find("span", {"class":"ux-summary__count"})
if total_reviews is not None:
total_reviews = total_reviews.text.split(" ")[0]
else:
total_reviews = "NA"
rating = soup.find("span", {"class":"ux-summary__start--rating"})
if rating is not None:
rating = rating.text
else:
rating = "NA"
product_info = {
"product_url": product_url,
"title": product_title,
"product_price": product_price,
"currency": currency,
"availability": quantity_available,
"nr_reviews": total_reviews,
"rating": rating
}
return product_info
def save_to_csv(products, csv_file_name="products.csv"):
# Write the list of dictionaries to a CSV file
with open(csv_file_name, mode='w', newline='') as csv_file:
# Create a csv.DictWriter object
writer = csv.DictWriter(csv_file, fieldnames=products[0].keys())
# Write the header (keys of the dictionary)
writer.writeheader()
# Write the rows (values of the dictionaries)
writer.writerows(products)
print(f"Data successfully written to {csv_file_name}")
def main(keyword_to_search: str):
products = []
r = requests.get(f"https://www.ebay.com/sch/i.html?_nkw={keyword_to_search}", proxies=proxies)
soup = BeautifulSoup(r.text, features="html.parser")
for item in soup.find_all("div", {"class": "s-item__info clearfix"})[2::]:
item_url = item.find("a").get("href")
product_info: dict = get_product_information(item_url)
print(product_info)
# Adding a 1-second delay between requests to avoid overloading the server and reduce the risk of being blocked
time.sleep(2)
products.append(product_info)
# save data to csv
save_to_csv(products)
if __name__ == '__main__':
keywords = "laptop bag"
main(keywords)
Bitte denken Sie daran, die Proxy-Variable mit einem neuen Benutzernamen und Passwort zu aktualisieren, bevor Sie sie verwenden.
Unsere Methode vereinfacht den Prozess und konzentriert sich auf vier Schlüsselfunktionen:
Entscheidend ist, dass Sie mit den richtigen Werkzeugen beginnen. Das müssen Sie tun:
mkdir ebay_scraping
cd ebay_scraping
python -m venv venv
source env/bin/activate # Unter Windows verwenden: venv\Scripts\activate
pip install anfragen bs4
In diesem Beispiel werden wir rotierende Proxyscrape Residential Proxies verwenden, um die Anonymität zu wahren und die private IP vor einer schwarzen Liste zu schützen.
Wir beginnen mit dem Import der erforderlichen Bibliotheken für dieses Web-Scraping-Projekt, die Folgendes umfassen:
csv importieren
Zeitimportieren
importiere Anfragen
von bs4 importieren BeautifulSoup
Um Ihre IP privat zu halten und damit die Chancen zu minimieren, dass Ihre IP von bestimmten Websites auf eine schwarze Liste gesetzt wird, wird empfohlen, Web-Scraping-Aktivitäten unter dem Schutz von Proxys durchzuführen. Wie oben erwähnt, werden wir für dieses Tutorial rotierende Proxyscrape Wohn-Proxys verwenden, aber Sie können auch andere Proxys oder gar keine Proxys verwenden.
proxies = {
"http": "http://username:[email protected]:6060",
"https": "http://username:[email protected]:6060",
}
Beginnen wir mit der Erläuterung des Suchprozesses, den wir in diesem Lernprogramm verwenden werden. Wir werden die eBay-URL mit dem Stichwort "Laptoptasche" abfragen, wie in dieser Abbildung gezeigt:
Wir werden die abgefragte URL verwenden, um eine Anfrage mit request.get()
. Sobald wir eine Antwort erhalten, werden wir den HTML-Inhalt mit BeautifulSoup (bs4) analysieren, um die URL jedes Produkts zu extrahieren. Die folgende Abbildung zeigt, wo sich die einzelnen Produkt-URLs im HTML-Inhalt befinden.
Der Produktlink befindet sich innerhalb einer <div>
Element mit dem Klasse s-item__info clearfix
. Um diese Links zu extrahieren, verwenden wir BeautifulSoup (bs4) für die Suche nach allen <div>
Elemente mit dieser speziellen Klasse. Sobald wir diese Elemente gefunden haben, gehen wir jedes einzelne durch, um Folgendes zu finden <a>
Elemente und extrahieren die href
Attribut, das die Produkt-URL enthält.
def main(keyword_to_search: str):
products = []
r = requests.get(f"https://www.ebay.com/sch/i.html?_nkw={keyword_to_search}", proxies=proxies)
soup = BeautifulSoup(r.text, features="html.parser")
for item in soup.find_all("div", {"class": "s-item__info clearfix"})[2::]:
item_url = item.find("a").get("href")
product_info: dict = get_product_information(item_url)
# Adding a 1-second delay between requests to avoid overloading the server and reduce the risk of being blocked
time.sleep(1)
products.append(product_info)
# save data to csv
save_to_csv(products)
Einführung in die produkt_information_holen
Funktion. Diese Funktion nimmt eine Produkt-URL als Eingabe, sendet eine Anfrage an diese URL und verwendet dann BeautifulSoup (bs4), um die Produktinformationen zu analysieren. spezifische Regeln und Regex-Muster.
def get_product_information(product_url) -> dict:
r = requests.get(product_url, proxies=proxies)
soup = BeautifulSoup(r.text, features="html.parser")
product_title = soup.find("h1", {"class": "x-item-title__mainTitle"}).text
product_price = soup.find("div", {"class": "x-price-primary"}).text.split(" ")[-1]
currency = soup.find("div", {"class": "x-price-primary"}).text.split(" ")[0]
# locate the element that holds quanity number of product
quantity_available = soup.find("div", {"class":"x-quantity__availability"})
if quantity_available is not None:
# Using regex check if we can locate the strings that holds this number
regex_pattern = r"\d+\savailable"
if re.search(regex_pattern, quantity_available.text) is not None:
quantity_available = re.search(regex_pattern, quantity_available.text).group()
# After string is located we extract the number by splitting it by space and selecting the first element.
quantity_available = quantity_available.split(" ")[0]
else:
quantity_available = "NA"
total_reviews = soup.find("span", {"class":"ux-summary__count"})
if total_reviews is not None:
total_reviews = total_reviews.text.split(" ")[0]
else:
total_reviews = "NA"
rating = soup.find("span", {"class":"ux-summary__start--rating"})
if rating is not None:
rating = rating.text
else:
rating = "NA"
product_info = {
"product_url": product_url,
"title": product_title,
"product_price": product_price,
"currency": currency,
"availability": quantity_available,
"nr_reviews": total_reviews,
"rating": rating
}
return product_info
Schließlich organisieren wir die geparsten Produkteinheiten in einem Wörterbuch, das dann von der Funktion zurückgegeben wird.
Es ist nun an der Zeit, diese Ergebnisse in einer CSV-Datei zu speichern, indem man die Python-eigenen csv Bibliothek. Die save_to_csv(produkte)
Funktion akzeptiert Produkte als Eingabe, d. h. eine Liste von Wörterbüchern, die die zuvor beschriebenen Produktdaten enthalten. Diese Daten werden dann in einer CSV-Datei gespeichert, die nach dem csv_datei_name
Argument, das standardmäßig "products.csv" lautet.
def save_to_csv(products, csv_file_name="products.csv"):
# Write the list of dictionaries to a CSV file
with open(csv_file_name, mode='w', newline='') as csv_file:
# Create a csv.DictWriter object
writer = csv.DictWriter(csv_file, fieldnames=products[0].keys())
# Write the header (keys of the dictionary)
writer.writeheader()
# Write the rows (values of the dictionaries)
writer.writerows(products)
print(f"Data successfully written to {csv_file_name}")
In diesem Tutorial haben wir gezeigt, wie man eBay scrapen kann, indem man ein Python-Skript erstellt, das nach einem Schlüsselwort sucht, Produktdetails extrahiert und die Daten in einer CSV-Datei speichert. Bei diesem Prozess werden wichtige Scraping-Techniken wie der Umgang mit HTML-Elementen, die Verwendung von Proxys zur Wahrung der Anonymität und die Einhaltung ethischer Scraping-Praktiken erläutert. Dieses Skript kann weiter verbessert werden, indem es eine Paginierungsfunktion und die Möglichkeit zur Verarbeitung mehrerer Schlüsselwörter enthält.
Denken Sie immer daran, verantwortungsvoll zu scrapen, die Nutzungsbedingungen der Website einzuhalten und Tools wie die Ratenbegrenzung zu verwenden, um Störungen zu vermeiden. Um Ihre Scraping-Aufgaben zuverlässiger und effizienter zu gestalten, sollten Sie unsere hochwertigen Proxy-Dienste unter ProxyScrape in Betracht ziehen. Ganz gleich, ob Sie Proxys für Privatanwender, Rechenzentren oder mobile Endgeräte benötigen, wir haben das Richtige für Sie. Sehen Sie sich unsere Angebote an, um Ihre Web-Scraping-Projekte auf die nächste Stufe zu heben!
Viel Spaß beim Schaben!