проблема с данными при парсинге. Список без кавычек

Я новичок в пайтоне, и недавно начал изучать парсинг данных с помощью beautifulsoup. Решил спарсить цены на одежду в wildberries и заметил, что данные о цене приходят в странном формате - списке без кавычек. По тегу с помощью метода get_text цену узнать не удалось, мною было принято решение сделать цикл на отсеивание ненужных символов:

price = ['<ins class="lower-price"> 6 150 ₽</ins>']
counter = 0
text = ''
for i in price[0]:
    if i == '<':
        counter += 1
    elif i == '>':
        counter += 1
    elif counter == 2:
        text += i
    print(text)

Price - это пример списка, который приходит когда я вызываю price = item.findAll('ins', class_ = "lower-price"), разве что в данном примере он с кавычками. Запустил код в отдельном файле - все работало как и задумывалось, выводилась цена в 6 150 P. Запускаю в оригинальном файле со строкой price = item.findAll('ins', class_ = "lower-price"), и все пошло наперекосяк. Переменная text выводилась пустой, а когда я выводил вместо text переменнную i следущим образом:

for i in price[0]:
     if i == '<':
         counter += 1
     elif i == '>':
         counter += 1
     elif counter == 2:
         text += i
     print(i)

То почему-то сразу выводилась цена. Может быть я что-то не так делаю? Думаю дело в самих возвращаемых данных - списке без кавычек, но все же хотелось бы услышать поподробнее. Вот полный пример кода:

import requests
from bs4 import BeautifulSoup as BS

def parse(url):
    response = requests.get(url)
    soup = BS(response.content, 'html.parser')
    items = soup.find('div', attrs = {'class': "catalog_main_table j-products-container", 'data-card-size':"c246x328", 'data-image-size':"c252x336", 'data-countereventsinfo':"", 'data-target-url':"GP", 'data-addtoponed-url':"/product/postpone", 'data-addtobasket-url':"https://lk.wildberries.ru/product/addtobasket", 'data-basket-url':"https://lk.wildberries.ru/basket", 'data-source':"Cataloger", 'data-item-selector':".j-card-item", 'data-enable-arrows':"true"})
    # print(items.text)
    for item in items:
        try:
            try:
                if item.findAll('ins', class_ = "lower-price") != []:
                    price = item.findAll('ins', class_ = "lower-price")
                    counter = 0
                    text = ''
                    for i in price[0]:
                        if i == '<':
                            counter += 1
                        elif i == '>':
                            counter += 1
                        elif counter == 2:
                            text += i
                        print(i)
            except():
                price = item.findAll('span', class_ = "lower-price")
                counter = 0
                text = ''
                for i in price[0]:
                    if i == '<':
                        counter += 1
                    elif i == '>':
                        counter += 1
                    elif counter == 2:
                        text += i
                    print(i)
        except(AttributeError):
            pass

parse('https://www.wildberries.ru/catalog/muzhchinam/odezhda/bryuki-i-shorty/banany')

P.s. насколько я понял, прохождение по price дает только 1 элемент - цену, т.е от туда извлекается только текстовая инфа при проходе, и причем сама цена(условно 3300 р) является 1 элементом. От сюда и отсутствие индексирования(i не будет сначала 3, потом еще раз 3 и потом двумя нолями и значком рубля, она сразу будет 3300 р. И я ошибся, можно извлечь текст - price[0].get_text(). Если что-то забыл - напишите пожалуйста.


Ответы (1 шт):

Автор решения: Jazzis
import re
import requests
from bs4 import BeautifulSoup as bs

url = '...'
r = requests.get(url)
soup = bs(r.content, 'html.parser')
container = soup.find('div', class_='catalog_main_table j-products-container')

text = container.findAll('ins', class_='lower-price')[0].get_text()

print(text)
# <ins class="lower-price"> 3 419 ₽</ins>

print(re.sub('[^0-9]', '', text))
# 3419
→ Ссылка