我有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;">Налог на 2016 год <b>2 750 руб.</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'
我该如何解决这个问题?
答案 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;">Налог на 2016 год <b>2 750 руб.</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