eBay - це відома онлайн-платформа, що пропонує можливості торгівлі широким асортиментом товарів серед зареєстрованих користувачів. У цьому посібнику буде пояснено, як скрапити дані з оголошень на eBay з використанням Python. Нас будуть цікавити деталі, доступні безпосередньо з самого оголошення, а також більш детальна інформація, отримана шляхом відвідування кожного з товарів.
Перед початком переконайтеся, що встановлено такі бібліотеки Python:
Встановіть ці бібліотеки за допомогою такої команди:
pip install requests lxml pandas
Під час пошуку товарів на eBay URL кожної сторінки можна змінити для навігації сторінками з результатами. Наприклад:
Параметр _pgn використовується для навігації по безлічі сторінок оголошень, що дає змогу витягувати великі дані. Давайте почнемо процес скрапінгу.
Для початку налаштуємо заголовки, щоб імітувати запит від реального браузера, що допоможе уникнути виявлення і потенційного блокування з боку антифрод-систем на платформі eBay. Потім відправляється запит на сторінку для збору посилань на кожен товар.
import requests
from lxml.html import fromstring
# Визначення заголовків для імітації реального браузера
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',
}
# Параметри запиту для пошукового запиту
params = {
'_nkw': 'laptop',
}
# Надсилання запиту на сторінку з оголошеннями eBay
listing_page_response = requests.get('https ссылка', params=params, headers=headers)
listing_parser = fromstring(listing_page_response.text)
На сторінці з оголошеннями будуть витягнуті URL-адреси окремих товарів. Це дасть змогу відвідати кожну сторінку товару для збору конкретних даних, як-от назва товару, ціна та інше.
# Парсинг сторінки з оголошеннями для вилучення посилань на товари
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Виведення прикладу знайдених посилань
print("Product Links:", links[:5]) # Показати перші п'ять посилань на товари
Отримавши URL-адреси товарів, перейдемо на кожну сторінку товару і витягнемо такі деталі:
Далі, виконаємо перебір кожного посилання і використаємо вирази XPath для пошуку необхідної інформації на сторінці товару.
product_data = []
for url in links:
# Надсилання запиту на сторінку товару
product_page_response = requests.get(url, headers=headers)
product_parser = fromstring(product_page_response.text)
# Витяг даних за допомогою 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]
# Збереження даних у словнику
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}")
Після збору даних можна зберегти їх у файл CSV за допомогою бібліотеки Pandas.
import pandas as pd
# Перетворення даних у DataFrame
df = pd.DataFrame(product_data)
# Збереження в CSV
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
eBay застосовує обмеження швидкості для запобігання навантаження на сервери безліччю запитів. Ось кілька методів, щоб уникнути виявлення:
Дотримуючись цих практик, можна мінімізувати ризик блокування і продовжувати ефективно збирати дані.
Нижче представлено повний код для скрапінгу даних з eBay і збереження їх у файл 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']
# Визначення заголовків для запиту
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),
}
# Параметри пошукового запиту і конфігурація проксі
params = {'_nkw': 'laptop'}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Отримання даних зі сторінки з оголошеннями
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')
# Витяг даних про товари
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
# Збереження в CSV
df = pd.DataFrame(product_data)
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
Скрапінг eBay за допомогою Python дає змогу ефективно збирати дані про товари, ціни та тенденції. У цьому посібнику ми розглянули скрапінг оголошень, управління пагінацією, налаштування заголовків і використання проксі для обходу виявлення. Важливо дотримуватися умов використання eBay, застосовуючи відповідальні інтервали запитів і ротацію проксі. З цими інструментами тепер можна легко збирати й аналізувати дані eBay для отримання ринкових інсайтів.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Коментарі: 0