2016-09-07 12 views
0

をいくつかのタグを取得し、私はHTMLコードBeautifulSoup:ページから

<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> 

を持っていると私は私が

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

を試してみてください。しかし、それはどのようにAttributeError: 'ResultSet' object has no attribute 'next_subling' を返し

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

を取得する必要がありますそれを修正できますか?

答えて

1

AttributeError: 'ResultSet' object has no attribute 'next_subling'

これは、find_all()が複数の結果 - 一致するタグのリストを返すためです。そして、この問題は、実際にcovered by the BeautifulSoup documentationです:

代わり

AttributeError: 'ResultSet' object has no attribute 'foo' - This usually happens because you expected find_all() to return a single tag or string. But find_all() returns a list of tags and strings–a ResultSet object. You need to iterate over the list and look at the .foo of each one. Or, if you really only want one result, you need to use find() instead of find_all() .

は、テキストによる特定labelを検索し、次の兄弟要素を取得するためにfind()を使用する必要があります。

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) 

プリント:

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

は、その後、あなたが使用して "B" のテキストへのアクセスを得ることができます:

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

は、それは私 'はAttributeErrorを返す: 'NoneType' オブジェクトには属性「find_next_sibling''を持っていません。私が 'mileages = soup.find( 'span'、text =u'Пробег: ')'を試してみると、それは私を返すなし –

+0

@ user6241246面白い、私のために働く - 私は使用したコードを貼り付けた。 – alecxe

0

このコードを試してみてください

b.text 
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

関連する問題