2016-09-07 3 views
0

Ich habe den HTML-CodeBeautifulSoup: bekommen einige Tag von der Seite

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

Und ich brauche

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

zu bekommen versuche ich

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

Aber es gibt AttributeError: 'ResultSet' object has no attribute 'next_subling' Wie kann ich das reparieren?

Antwort

1

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

Dies ist, weil find_all() mehrere Ergebnisse zurückgibt - eine Liste der übereinstimmenden Tags. Und dieses Problem ist eigentlich 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() .

Stattdessen sollten Sie find() werden unter Verwendung eines spezifischen label von Text zu lokalisieren und dann die nächste Geschwisterelement erhalten:

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

Dieser Code funktioniert für mich wie ist:

# -*- 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) 

druckt:

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

zurückgeben mich 'Attribute: 'NoneType' Objekt hat kein Attribut‚find_next_sibling''. Wenn ich versuche "Kilometerstand = Suppe.find ('span', Text = U'Progeb: ')' es gibt mir keine –

+0

@ user6241246 interessant, funktioniert für mich, wie es ist - Ich habe den Code eingefügt, den ich verwendet habe. – alecxe

0

Versuchen Sie diesen Code:

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

Dann können Sie den Zugriff auf Text von "b" erhalten mit:

b.text 
0

sollte folgendes

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

Ergebnisausgabe:

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

prost,

Dhiraj

Verwandte Themen