@gnsd

Парсер OZON выдает пустой список в таблицу Excel, в чем проблема кода?

import requests
import openpyxl
from bs4 import BeautifulSoup

# Запрос у пользователя названия категорий для поиска
categories = input("Введите категории товаров через запятую: ").split(",")

# Запрос у пользователя минимальной и максимальной цены для поиска товаров
min_price = int(input("Введите минимальную цену товара: "))
max_price = int(input("Введите максимальную цену товара: "))

# Создание пустого Excel-файла
wb = openpyxl.Workbook()
ws = wb.active
ws.append(["Название товара", "Цена со скидкой", "Цена без скидки", "Имя продавца", "Оценка товара", "Количество отзывов"])

# Определение URL-адреса страницы OZON
url = f"https://www.ozon.ru/category/{'+'.join(categories)}/"

# Параметры запроса для сортировки по цене
params = {
    "price": "1",
    "sort": "price"
}

# Запрос страницы и ее парсинг
response = requests.get(url, params=params)
soup = BeautifulSoup(response.content, "html.parser")

# Поиск всех товаров на странице
products = soup.find_all("div", {"class": "b5v6"})

# Обработка всех найденных товаров
for product in products:
    # Получение данных о товаре
    title = product.find("a", {"class": "a0c6"}).get("title")
    seller = product.find("a", {"class": "a8c9"}).text.strip()
    discount_price = product.find("div", {"class": "a6f8"}).text.strip()
    original_price = product.find("div", {"class": "b5v8"}).text.strip()
    rating = product.find("div", {"class": "a8e9"}).text.strip()
    reviews = product.find("div", {"class": "a8e0"}).text.strip()

    # Проверка, соответствует ли цена заданным параметрам
    price = int(discount_price.replace(" ", "")) if discount_price else int(original_price.replace(" ", ""))
    if min_price <= price <= max_price:
        # Запись данных в Excel-файл
        ws.append([title, discount_price, original_price, seller, rating, reviews])

# Сохранение Excel-файла
wb.save("C:/Users/admin/Documents/ozon.xlsx")
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
В том, что он не учитывает ни принципы современной web- разработки, ни наличие защиты от парсинга.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
Проверь, что тебе вернул BeautifulSoup, есть ли в его ответе нужные div и a.
Вполне возможно что наименования классов изменились, или в ответе нет в принципе товаров, например стоит защита от таких парсеров либо код html формируется в браузере скриптом а не на сервере и т.п.

Настоятельно рекомендую не мучиться, и работать с полноценным браузером (например selenium или инжектить скрипт в обычный браузер плагином типа greasemonkey) а не такими примитивными техниками как BeautifulSoup, тогда тебе будет не важно, как защищается площадка (почти, существуют способы защиты и от этого), в конечном счете ты должен будешь симулировать поведение обычного пользователя на обычном браузере, выдерживать паузы, возекать и кликать мышкой и прочее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы