Как извлечение атрибута тега выполнить в цикле?

Рейтинг: 0Ответов: 1Опубликовано: 15.02.2023

Как, используя beautifulsoup, извлечь значение атрибута тега и запустить всё в цикле?

Запуская поодиночке - всё приходит, в цикле - нет

from bs4 import BeautifulSoup
import codecs

f = codecs.open("ZHVACHKA.html", 'r', 'utf-8')
html = f.read()

soup = BeautifulSoup(html, "lxml")
products = soup.findAll("div", class_="tovar")
data = [products]
#product_name = soup.find(class_="tovar-schet").find("p") #вытащил значение из тега по атрибуту
#product_price = soup.find("div", class_="tovar-price")[0].text #вытащил цену




#на всякий случай решил поставить обработку в случае изменения разметки сайта
#запускаю цикл на сбор всех данных по классу и атрибуту
for product in products:
    #на всякий случай решил поставить обработку в случае изменения разметки сайта
    try:
        product_name = product.find("p")  # вытащил значение из тега по атрибуту
        product_price = product.text # вытащил цену
        print(data)
    except Exception as ex:
        print(ex)

Запускаю поодиночке - всё работает, но как только пытаюсь запустить всё в цикле - приходит какая-то каша

Ответы

▲ 0Принят

Код содержит ошибку в цикле извлечения значений атрибутов тегов, попробуйте изменить блок try..catch на следующий:

try:
    product_name = product.find("p").text  # вытащил значение из тега по атрибуту
    product_price = product.find("div", class_="tovar-price").text.strip()  # вытащил цену
    print("Product name:", product_name)
    print("Product price:", product_price)
except Exception as ex:
    print(ex)