BeautifulSoup:从页面获取一些标签

时间:2016-09-07 13:39:09

标签: python html beautifulsoup

我有html代码

<div class="b-media-cont b-media-cont_relative" data-triggers-container="true"><span class="label">Двигатель:</span> бензин, 1.6 л<br/>
<div class="b-triggers b-triggers_theme_dashed-buttons b-triggers_size_s b-triggers_text-notif"><div class="b-triggers__text">110 л.с.</div><div class="b-triggers__item b-triggers__item_notif" data-target="cost" data-target-container="[data-triggers-container]" data-toggle="tax_dropdown"><div class="b-link b-link_dashed">110 л.с.</div></div><div class="b-triggers-hidden-area b-triggers-hidden-area_width_240 b-triggers-hidden-area_close" data-target-bind="cost" style="left: 0px; top: 39px; width: 241px;">Налог на&nbsp;2016&nbsp;год <b>2&nbsp;750&nbsp;руб.</b><br/><br/><span class="gray">Расчет произведен на легковой автомобиль по <a href="http://law.drom.ru/calc/region77/skoda/rapid/2016/110/">калькулятору транспортного налога</a> для Москвы (<a href="http://www.drom.ru/my_region/">изменить регион</a>).</span></div></div><br/>
<span class="label">Тип кузова:</span> хэтчбек<br/>
<span class="label">Цвет:</span> золотистый<br/>
<span class="label">Пробег:</span> <b>Новый автомобиль от официального дилера</b><br/>
<span class="label">Руль:</span> левый<br/>
<span class="label">VIN:</span> XW8AC1NH7HK****32<br/>
</div><p><span class="label">Данные по модели из каталога:</span> 
<b>толян</b>
<b>4 515 руб.</b>
<b>Продажа Тойота Авенсис.</b>

我需要得到

<b>Новый автомобиль от официального дилера</b>

我试试

mileages = soup.find_all('span', class_='label').next_subling

但它会返回AttributeError: 'ResultSet' object has no attribute 'next_subling' 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

  

AttributeError:&#39; ResultSet&#39;对象没有属性&#39; next_subling&#39;

这是因为find_all()返回多个结果 - 匹配标记列表。而且,这个问题实际上是covered by the BeautifulSoup documentation

  

AttributeError: 'ResultSet' object has no attribute 'foo' - 这通常是因为您希望find_all()返回单个标记或字符串。但是find_all()会返回标记和字符串的列表 - 一个ResultSet对象。您需要遍历列表并查看每个列表的.foo。或者,如果您真的只想要一个结果,则需要使用find()而不是find_all()

相反,您应该使用find()按文字查找特定的label,然后获取下一个兄弟元素:

mileages = soup.find('span', text=u'Пробег:').find_next_sibling("b").get_text(strip=True)

此代码适用于我:

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup

data = u"""
<div class="b-media-cont b-media-cont_relative" data-triggers-container="true"><span class="label">Двигатель:</span> бензин, 1.6 л<br/>
<div class="b-triggers b-triggers_theme_dashed-buttons b-triggers_size_s b-triggers_text-notif"><div class="b-triggers__text">110 л.с.</div><div class="b-triggers__item b-triggers__item_notif" data-target="cost" data-target-container="[data-triggers-container]" data-toggle="tax_dropdown"><div class="b-link b-link_dashed">110 л.с.</div></div><div class="b-triggers-hidden-area b-triggers-hidden-area_width_240 b-triggers-hidden-area_close" data-target-bind="cost" style="left: 0px; top: 39px; width: 241px;">Налог на&nbsp;2016&nbsp;год <b>2&nbsp;750&nbsp;руб.</b><br/><br/><span class="gray">Расчет произведен на легковой автомобиль по <a href="http://law.drom.ru/calc/region77/skoda/rapid/2016/110/">калькулятору транспортного налога</a> для Москвы (<a href="http://www.drom.ru/my_region/">изменить регион</a>).</span></div></div><br/>
<span class="label">Тип кузова:</span> хэтчбек<br/>
<span class="label">Цвет:</span> золотистый<br/>
<span class="label">Пробег:</span> <b>Новый автомобиль от официального дилера</b><br/>
<span class="label">Руль:</span> левый<br/>
<span class="label">VIN:</span> XW8AC1NH7HK****32<br/>
</div><p><span class="label">Данные по модели из каталога:</span>
<b>толян</b>
<b>4 515 руб.</b>
<b>Продажа Тойота Авенсис.</b>
</div>
"""
soup = BeautifulSoup(data, "html.parser")

mileages = soup.find('span', text=u'Пробег:').find_next_sibling("b").get_text(strip=True)
print(mileages)

打印:

Новый автомобиль от официального дилера

答案 1 :(得分:0)

试试这段代码:

b = None
spans = soup.find_all("span", {"class":"label"})
for span in spans:
    b = span.find("b")
    if b is not None:
        break

然后您就可以访问&#34; b&#34;使用:

b.text

答案 2 :(得分:0)

以下内容适用于您

spanTag = soup.find_all("span", string="Пробег:")
print spanTag[0].find_next_sibling("b")
print spanTag[0].find_next_sibling("b").string

结果输出:

<b>Новый автомобиль от официального дилера</b>
Новый автомобиль от официального дилера

欢呼声,

DHIRAJ