@onepunchman404

Как выдернуть весь текст из всех div с одинаковым классом?

Есть парсер, который берет информацию с магазина одежды. Так вот мне нужно взять размеры, все размеры разбросаны по нескольким дивам с одинаковым классов, как мне все их спарсить? Использую библиотеки BeautifulSoup и requests. Я понимаю, что можно сделать что-то типо этого:
item.find_all[0]('a', class_='products-list-item__size-item link') + item.find_all[1]('a', class_='products-list-item__size-item link') ,
но нужен более универсальный вариант, который сам определял бы количество этих размеров и брал их всех

5eb08090dbfa1682307518.png
def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='products-list-item')

    link = []
    for item in items:
        link.append({
            'Link': HOST + item.find('a', class_='link').get('href'),
            'Size': item.find_all('a', class_='products-list-item__size-item link')
        })
    print(link)
    return link


Сейчас выдает вот эту кашу 'Size': [<a class="products-list-item__size-item link" data-link="/p/ma178ewyyl56/clothes-marksspencer-komplekt/?sku=ma178ewyyl56b100">44</a>, <a class="products-list-item__size-item link" data-link="/p/ma178ewyyl56/clothes-marksspencer-komplekt/?sku=ma178ewyyl56b120">46</a> ......
  • Вопрос задан
  • 421 просмотр
Пригласить эксперта
Ответы на вопрос 1
Amigun
@Amigun
Джун : |
Через requests получаем нужную страничку:
response = requests.get('тут_ваша_ссылка')
Надеюсь, вы знаете как это делается.
Дальше в бой идет bs4.
soup = BeautifulSoup(response.content, 'lxml')
Теперь создадим цикл for для перебора ВСЕХ (вы же этого хотели, да?) тегов, и будем выдергивать из них текст, если у него имеется нужный нам класс.
for i in soup.recursiveChildGenerator():
		if i.name:
			if i.name == 'a':  # У вас на скрине показан тег a
				try:
					if i.attrs['class']:
						if i.attrs['class'] == 'нужный_вам_тег':
						# Если выше не работает, то попробуйте следующий вариант
						# if i.attrs['class'] == ['нужный_вам_тег']:
							return i.text
						else:
							pass
				except KeyError:
					pass


По идее, это должно работать, но я не тестировал это на вашем сайте.
Пробуйте, делайте.
Если что подробнее можете почитать тут
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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