Парсинг wildberries. Как получить цену одного конкретного товара?
Пишу код для парсинга на wildberries. Когда загружаю в код ссылку на каталог(к примеру https://www.wildberries.ru/catalog/muzhchinam/odezhda/kostyumy), после запуска кода получаю значение цены на первый товар из каталога. Когда же я хочу получить цену на какой-либо из конкретных товаров (к примеру https://www.wildberries.ru/catalog/202925589/detail.aspx), то после запуска получаю сообщение, что цена не найдена. Что нужно исправить в коде, что бы я мог получить цену только одного конкретного товара по ссылке? Поиск элемента с ценой вроде правильный. Быть может нужно изменить подход?
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from fake_useragent import UserAgent
import time
import random
import re
def get_price_wildberries(url):
options = uc.ChromeOptions()
ua = UserAgent()
user_agent = ua.random
options.add_argument(f'user-agent={user_agent}')
driver = uc.Chrome(options=options)
try:
driver.get(url)
driver.implicitly_wait(10) # Wait for dynamic content
# Поиск элемента с ценой. Подход должен быть гибким
price_element = driver.find_element(By.CSS_SELECTOR, ".price-block__final-price, .price__price, .price, span.price")
print(price_element.text)
price_text = price_element.text.strip()
print(price_text)
# Извлекаем только цифры и точки для преобразования в float
price_value = re.sub(r"[^\d\.]", "", price_text)
# Проверяем наличие точки
if "." not in price_value:
try:
return int(price_value)
except ValueError:
return None
try:
return float(price_value)
except ValueError:
return None
except Exception as e:
print(f"Error getting price: {e}")
return None
finally:
print('Сработал блок 2')
driver.quit()
if __name__ == '__main__':
product_url = "https://www.wildberries.ru/catalog/202925589/detail.aspx"
price = get_price_wildberries(product_url)
if price:
print(f"Product price: {price}")
else:
print(f"Price not found for {product_url}")
Ответы (1 шт):
Советую начать работать с инструментами разработчика (для Chrome или Mozilla это клавиша F12)
Если открыть инструменты разработчика на wildberries и обновить страницу можно найти огромное количество ссылок на внутренние(хотя скорее открытые) api. Подсказка: сеть(network) -> список. там есть заголовки(headers). в заголовках есть url куда посылается запрос (и ip), какой запрос (POST, GET и т.п.) и что туда было отправлено (полезная нагрузка или payload).
есть открытая ручка api wildberries: https://card.wb.ru/cards/v2/detail например, https://card.wb.ru/cards/v2/detail?appType=1&curr=rub&dest=-1255987&spp=30&ab_testing=false&nm=314337853
wildberries, моё почтение - ручки работают молниеносно.
для эффективного парса любой страницы, использующей dotnet(aspx) или js (или в случае wildberries - комбо) selenium и его аналоги стоит использовать только для выполнения действий на странице (ТОЛЬКО В ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЯХ КОНЕЧНО... КОНЕЧНО...) либо в саааааааааааааамом крайнем случае. в остальном всегда есть api-ручки, по которым можно получить чистые данные в json или xml формате, без тонны html разметки, через requests или aiohttp.