eBay ist eine bekannte Online-Plattform, die ihren registrierten Nutzern die Möglichkeit bietet, mit einer breiten Palette von Produkten zu handeln. In diesem Leitfaden wird erklärt, wie man mit Python Daten aus eBay-Angeboten auslesen kann. Dabei interessieren wir uns sowohl für die Details, die in der Auflistung selbst zu finden sind, als auch für die Details, die bei den einzelnen Produkten zu finden sind.
Um loszulegen, stellen Sie sicher, dass Sie die folgenden Python-Bibliotheken installiert haben:
Installieren Sie diese Bibliotheken mit:
pip install requests lxml pandas
Bei der Suche nach Produkten auf eBay kann jede Seiten-URL geändert werden, um durch paginierte Ergebnisse zu navigieren. Zum Beispiel:
Der Parameter _pgn wird verwendet, um durch mehrere Seiten von Listen zu navigieren, was den Abruf umfangreicher Daten ermöglicht. Beginnen wir mit dem Scraping-Prozess.
Zunächst richten wir Kopfzeilen ein, um eine echte Browser-Anfrage zu imitieren, damit sie von den Anti-Bot-Maßnahmen von eBay nicht erkannt und möglicherweise blockiert wird. Dann senden wir eine Anfrage an die Angebotsseite, um die Links für jedes Produkt zu sammeln.
import requests
from lxml.html import fromstring
# Definieren Sie Kopfzeilen, um einen echten Browser zu simulieren
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',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'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',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
# Anfrageparameter für die Suchanfrage
params = {
'_nkw': 'laptop',
}
# Senden Sie eine Anfrage an die eBay-Angebotsseite
listing_page_response = requests.get('https link', params=params, headers=headers)
listing_parser = fromstring(listing_page_response.text)
Auf der Angebotsseite extrahieren wir die URLs der einzelnen Produkte. So können wir jede Produktseite besuchen, um spezifische Details wie den Produkttitel, den Preis und mehr zu erfassen.
# Analysieren Sie die Angebotsseite, um Produktlinks zu extrahieren
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Ausgabe eines Beispiels für die gefundenen Links
print("Product Links:", links[:5]) # Display the first five product links
Mit den Produkt-URLs in der Hand, besuchen wir jede Produktseite und extrahieren die folgenden Details:
Als Nächstes durchlaufen wir jeden Link und verwenden XPath-Ausdrücke, um die erforderlichen Informationen auf der Produktseite zu finden.
product_data = []
for url in links:
# Senden Sie eine Anfrage an die Produktseite
product_page_response = requests.get(url, headers=headers)
product_parser = fromstring(product_page_response.text)
# Daten mit XPath extrahieren
try:
product_title = product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0]
price = product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0]
shipping_cost = product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
product_condition = product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0]
available_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0]
sold_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1]
payment_options = ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label'))
return_policy = product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
# Daten in einem Wörterbuch speichern
product_info = {
'Title': product_title,
'Price': price,
'Shipping Cost': shipping_cost,
'Condition': product_condition,
'Available Quantity': available_quantity,
'Sold Quantity': sold_quantity,
'Payment Options': payment_options,
'Return Policy': return_policy,
}
product_data.append(product_info)
except IndexError as e:
print(f"An error occurred: {e}")
Nachdem wir die Daten gesammelt haben, können wir sie mit Pandas in einer CSV-Datei speichern.
import pandas as pd
# Daten in DataFrame umwandeln
df = pd.DataFrame(product_data)
# In CSV speichern
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
eBay setzt eine Ratenbegrenzung ein, um übermäßige Anfragen zu verhindern. Hier sind einige Methoden, um die Erkennung zu umgehen:
Wenn Sie diese Best Practices befolgen, können Sie das Risiko, blockiert zu werden, minimieren und weiterhin effizient Daten auslesen.
Hier ist der vollständige Code für das Abrufen von eBay-Daten und das Speichern in einer CSV-Datei:
import requests
import random
from lxml.html import fromstring
import pandas as pd
useragents = ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36']
# Kopfzeilen für die Anfrage definieren
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',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'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',
'user-agent': random.choice(useragents),
}
# Parameter der Suchanfrage
params = {'_nkw': 'laptop'}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Abrufen der Angebotsseite
listing_page_response = requests.get('https://www.ebay.com/sch/i.html', params=params, headers=headers, proxies=proxies)
listing_parser = fromstring(listing_page_response.text)
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Produktdaten extrahieren
product_data = []
for url in links:
product_page_response = requests.get(url, headers=headers, proxies=proxies)
product_parser = fromstring(product_page_response.text)
try:
product_info = {
'Title': product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0],
'Price': product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0],
'Shipping Cost': product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0],
'Condition': product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0],
'Available Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0],
'Sold Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1],
'Payment Options': ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label')),
'Return Policy': product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
}
product_data.append(product_info)
except IndexError:
continue
# In CSV speichern
df = pd.DataFrame(product_data)
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
Das Scraping von eBay mit Python ermöglicht eine effiziente Datenerfassung zu Produkten, Preisen und Trends. In diesem Leitfaden haben wir das Scraping von Angeboten, den Umgang mit Paginierung, das Setzen von Kopfzeilen und die Verwendung von Proxys zur Vermeidung von Entdeckung behandelt. Denken Sie daran, die eBay-Nutzungsbedingungen zu respektieren, indem Sie verantwortungsbewusste Anfrageintervalle und Proxy-Rotation verwenden. Mit diesen Tools können Sie jetzt ganz einfach eBay-Daten sammeln und analysieren, um einen Einblick in den Markt zu erhalten. Viel Spaß beim Scrapen!
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0