codeFlowType:
codeWrite
codeFlowLang:
Python
Парсер сайта ozon.ru по наименованию товара и возрастанию цены
Конечно! Ниже представлен пример парсера сайта ozon.ru
, который ищет товар по названию и сортирует результаты по возрастанию цены. Для этого используется библиотека requests
для получения HTML и BeautifulSoup
для парсинга.
import requests
from bs4 import BeautifulSoup
import urllib.parse
def ozon_search(query, max_results=10):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/113.0.0.0 Safari/537.36'
}
# Кодируем поисковый запрос для URL
encoded_query = urllib.parse.quote(query)
# Формируем URL поиска с сортировкой по цене возрастанию
url = f'https://ozon.ru/search/?text={encoded_query}&sort=price_asc'
response = requests.get(url, headers=headers)
if response.status_code != 200:
print(f"Ошибка при запросе: статус-код {response.status_code}")
return
soup = BeautifulSoup(response.text, 'html.parser')
# На сайте Ozon результаты поиска могут быть внутри определённых блоков
# В примере используется класс, вероятно, содержащий товарные карточки
products = soup.find_all('div', {'class': 'a4f5d9f9af---search-result-row---'})
results = []
for product in products[:max_results]:
# Название товара
title_tag = product.find('div', {'data-testid': 'product-title'})
title = title_tag.get_text(strip=True) if title_tag else 'Нет названия'
# Цена товара
price_tag = product.find('div', {'data-test': 'price'})
if price_tag:
price_text = price_tag.get_text(strip=True)
# Извлечём число из текста, убрав символы валюты и пробелы
price_numbers = ''.join(filter(str.isdigit, price_text))
price = int(price_numbers) if price_numbers else None
else:
price = None
results.append({
'название': title,
'цена': price
})
# Сортируем по возрастанию цены
results_sorted = sorted(results, key=lambda x: (x['цена'] is None, x['цена']))
# Вывод результатов
for item in results_sorted:
print(f"Название: {item['название']}, Цена: {item['цена'] or 'Нет данных'}")
# Пример использования
search_query = "смартфон"
ozon_search(search_query)
sort=price_asc
).max_results
товаров.Если потребуется, я могу помочь с уточнением селекторов или расширением функциональности.