Не могу правильно спарсить данные с сайта
from bs4 import BeautifulSoup
from urllib import request, error
import ssl
from urllib.parse import quote
import time
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
def parse_earrings(url):
try:
req = request.Request(url, headers=headers)
with request.urlopen(req) as resp:
data = resp.read()
soup = BeautifulSoup(data, 'lxml')
earrings = soup.find_all('span', itemprop='name')
earrings_info = soup.find_all('div', class_='b-product_card__price-row')
if not earrings or not earrings_info:
print("На этой странице нет товаров.")
return
for name, info in zip(earrings, earrings_info):
info = soup
name = soup
name_text = name.text.strip()
price_value = info.find('span', class_='text-through') # Цена от
discount_value = info.find('span', class_='b-product_card__price-value') # Цена со скидкой
price_text = price_value.text.strip() if price_value else None
discount_text = discount_value.text.strip() if discount_value else None
result = f"{name_text} - Цена от: {price_text}{' Со скидкой: ' + discount_text if discount_text else ''}"
print(result)
except error.HTTPError as e:
print(f"HTTP Error: {e}")
except Exception as e:
print(f"Error occurred: {e}")
def main():
base_url = "https://epldiamond.ru/catalog/"
ssl._create_default_https_context = ssl._create_unverified_context
while True:
category = input("Введите категорию (или 'выход' для завершения): ")
if category.lower() == "выход":
break
elif category.lower() != "серьги":
print("Некорректная категория. Пожалуйста, введите правильное название категории или 'выход' для завершения.")
continue
page_number = 1
should_continue = True
while should_continue:
category_url = f"{base_url}{quote('diamond-earrings/')}?PAGEN_2={page_number}"
time.sleep(2)
print(f"Парсинг страницы {page_number}...")
parse_earrings(category_url)
user_input = input("Введите 'далее' для перехода на следующую страницу или 'выход' для завершения: ")
if user_input.lower() == "выход":
break
elif user_input.lower() != "далее":
print("Некорректная команда, попробуйте снова.")
continue
page_number += 1
if __name__ == "__main__":
main()
В основном когда писал код, пытался вывести в терминале вывод данных в нужном мне формате, и в один момент код просто перестал корректно работать, в терминале только 1 вывод и это:
Введите категорию (или 'выход' для завершения): Серьги
Парсинг страницы 1...
На этой странице нет товаров.
Введите 'далее' для перехода на следующую страницу или 'выход' для завершения:,
Источник: Stack Overflow на русском