pl
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia 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