Как извлечь
, когда классы одинаковые?
Столкнулся с проблемой при разработке парсера: 'tariff' : item.find() должен спарсить <div class="col col-currency-rate"><p>**12,24**</p><p>**с использованием электроплит**</p><p>**объем от 0 до 100 кВт**</p> эту часть. Но при парсе постоянно дает None. Когда использую другие способы, то вообще дает город.
provider.append({
'title' : item.find('div', class_ = 'col col-currency').get_text(strip = True),
'city' : item.find('div', class_ = 'col col-currency-rate').get_text(strip = True),
'tariff' : item.find()
})
HTML
<div class="row">
<div class="col col-currency"><a target="_blank" href="http://energougol21.kz/index.php">Энергоуголь XXI</a> </div>
<div class="col col-headery col-currency-rate"><p>Город</p></div>
<div class="col col-headery col-currency-rate"><p>Тариф, тенге. за 1 кВт⋅час, с НДС</p></div>
<div class="col col-headery col-currency-rate"><p>Дата вступления в действие тарифа</p></div>
<div class="col col-currency-rate">
Сарань </div>
<div class="col col-currency-rate">
<p>12,24</p>
<p>с использованием электроплит</p>
<p>объем от 0 до 100 кВт</p>
</div>
<div class="col col-currency-rate"> 01.01.2020</div>
</div>
Ответы (1 шт):
Автор решения: Jack_oS
→ Ссылка
При такой структуре - только перебирать вложенные теги и брать нужные:
>>> from bs4 import BeautifulSoup
>>> html = '<div class="row"><div class="col col-currency"><a target="_blank" href="http://energougol21.kz/index.php">Энергоуголь XXI</a> </div><div class="col col-headery col-currency-rate"><p>Город</p></div><div class="col col-headery col-currency-rate"><p>Тариф, тенге. за 1 кВт⋅час, с НДС</p></div><div class="col col-headery col-currency-rate"><p>Дата вступления в действие тарифа</p></div><div class="col col-currency-rate">Сарань</div><div class="col col-currency-rate"><p>12,24</p><p>с использованием электроплит</p><p>объем от 0 до 100 кВт</p></div><div class="col col-currency-rate">01.01.2020</div></div>'
>>> soup = BeautifulSoup(html, 'html.parser')
>>> tariff = soup.find('div', class_='row').find_all('div', class_='col-currency-rate')[4].find_all('p')[0].text
>>> tariff
'12,24'
Т.е. если на всех страницах одинаковый уровень вложений - возьмите пятый col-currency-rate, найдите в нем все p, и выделите текст у первого их них...