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.ru!
Комментарии: 0