eBay to dobrze znana platforma internetowa, która oferuje zarejestrowanym użytkownikom możliwości handlu szeroką gamą produktów. W tym przewodniku wyjaśnimy, jak skrobać dane z aukcji eBay za pomocą Pythona. W związku z tym będziemy zainteresowani szczegółami, które są dostępne z samej oferty, a także z przejścia do każdego z produktów po kolei, aby uzyskać bardziej szczegółowe informacje.
Aby rozpocząć, upewnij się, że masz zainstalowane następujące biblioteki Python:
Zainstaluj te biblioteki używając:
pip install requests lxml pandas
Podczas wyszukiwania produktów w serwisie eBay każdy adres URL strony można zmodyfikować, aby nawigować po paginowanych wynikach. Na przykład:
Parametr _pgn służy do poruszania się po wielu stronach ofert, umożliwiając pobieranie obszernych danych. Rozpocznijmy proces skrobania.
Na początek skonfigurujemy nagłówki tak, aby naśladowały prawdziwe żądanie przeglądarki, co pomoże uniknąć wykrycia i potencjalnego zablokowania przez środki antybotowe eBay. Następnie wyślemy żądanie do strony aukcji, aby zebrać linki do każdego produktu.
import requests
from lxml.html import fromstring
# Definiowanie nagłówków w celu symulacji prawdziwej przeglądarki
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',
}
# Parametry żądania dla zapytania wyszukiwania
params = {
'_nkw': 'laptop',
}
# Wyślij prośbę na stronę aukcji eBay
listing_page_response = requests.get('https link', params=params, headers=headers)
listing_parser = fromstring(listing_page_response.text)
Na stronie oferty wyodrębnimy adresy URL poszczególnych produktów. Umożliwi nam to odwiedzenie strony każdego produktu w celu zebrania szczegółowych informacji, takich jak tytuł produktu, cena i inne.
# Parsowanie strony oferty w celu wyodrębnienia linków do produktów
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Wypisz próbkę znalezionych linków
print("Product Links:", links[:5]) # Display the first five product links
Mając w ręku adresy URL produktów, odwiedzimy każdą stronę produktu i wyodrębnimy następujące szczegóły:
Następnie przejdziemy przez każdy link i użyjemy wyrażeń XPath, aby zlokalizować wymagane informacje na stronie produktu.
product_data = []
for url in links:
# Wyślij żądanie na stronę produktu
product_page_response = requests.get(url, headers=headers)
product_parser = fromstring(product_page_response.text)
# Wyodrębnianie danych przy użyciu XPath
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]
# Przechowywanie danych w słowniku
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}")
Po zebraniu danych możemy zapisać je do pliku CSV za pomocą Pandas.
import pandas as pd
# Konwersja danych do DataFrame
df = pd.DataFrame(product_data)
# Zapisz do CSV
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
eBay stosuje ograniczanie stawek, aby zapobiec nadmiernym żądaniom. Oto kilka metod pozwalających uniknąć wykrycia:
Postępując zgodnie z tymi najlepszymi praktykami, można zminimalizować ryzyko zablokowania i kontynuować skuteczne skrobanie danych.
Oto pełny kod do skrobania danych eBay i zapisywania ich do pliku CSV:
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']
# Definiowanie nagłówków dla żądania
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),
}
# Parametry zapytania wyszukiwania
params = {'_nkw': 'laptop'}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Pobierz stronę oferty
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')
# Wyodrębnianie danych produktu
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
# Zapisz do CSV
df = pd.DataFrame(product_data)
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
Scraping eBay za pomocą Pythona pozwala na efektywne gromadzenie danych na temat produktów, cen i trendów. W tym przewodniku omówiliśmy skrobanie ofert, obsługę paginacji, ustawianie nagłówków i korzystanie z serwerów proxy w celu uniknięcia wykrycia. Pamiętaj, aby przestrzegać warunków korzystania z usługi eBay, stosując odpowiedzialne interwały żądań i rotację serwerów proxy. Dzięki tym narzędziom możesz teraz łatwo gromadzić i analizować dane eBay w celu uzyskania wglądu w rynek. Udanego skrobania!
Komentarze: 0