Используйте find()
или find_all()
vendor = offer.find('span', {'class' : 'seller_name'})
РЕДАКТИРОВАТЬ: После тестирования я обнаружил, что это должно быть
vendor = offer('span', {'class' : 'seller_name'})
Использование offer.span
вас получить только первый <span>
в <div>
.
Используя offer.span(...)
, он не ищет <span>
внутри <div>
, а элементы внутри <span>
- он работает как offer.span.find_all(...)
.
Do c: Вызов тега похож на вызов find_all ()
from bs4 import BeautifulSoup
HTML = '''<div class="cd">
<span class="seller"> Vendido por </span>
<span class="seller_name">
Cdiscount
</span>
<div class="offer_price_section">
<div>
<span class="price_offer">
88,99 €
</span>
</div><!---->
</div>
</div>'''
soup = BeautifulSoup(HTML, "lxml")
find = soup.find_all('div', {'class' : 'cd'})
for offer in find:
vendor = offer.find('span', {'class' : 'seller_name'})
print(vendor.text.strip())
vendor = offer.find_all('span', {'class' : 'seller_name'})
print(vendor)
vendor = offer('span', {'class' : 'seller_name'})
print(vendor)
Результат
Cdiscount
[<span class="seller_name">
Cdiscount
</span>]
[<span class="seller_name">
Cdiscount
</span>]