2016-03-05 67 views
1

我有以下html:我试图将以下数字保存为变量Available Now,7,148.49,HatchBack,Good。我遇到的问题是,由于他们没有附加类,因此我无法独立地将它们取出来。我想知道如何解决这个问题。以下是HTML然后我徒劳的代码来解决这个问题。如何查找具有特定值的文本BeautifulSoup python2.7

</div> 
<div class="car-profile-info"> 
<div class="col-md-12 no-padding"> 
<div class="col-md-6 no-padding"> 
<strong>Status:</strong> <span class="statusAvail"> Available Now </span><br/> 
<strong>Min. Booking </strong>7 Days ($148.89)<br/> 
<strong>Style: </strong>Hatchback<br/> 
<strong>Transmission: </strong>Automatic<br/> 
<strong>Condition: </strong>Good<br/> 
</div> 

Python 2.7代码: - 这给了我整个html!

soup=BeautifulSoup(html) 
print soup.find("span",{"class":"statusAvail"}).getText() 
for i in soup.select("strong"): 
    if i.getText()=="Min. Booking ": 
     print i.parent.getText().replace("Min. Booking ","") 

回答

1

找到div元素下的所有元素强与class="car-profile-info"和,找到每个元素,得到.next_siblings,直到遇到br元素:

from bs4 import BeautifulSoup, Tag 

for strong in soup.select(".car-profile-info strong"): 
    label = strong.get_text() 
    value = "" 
    for elm in strong.next_siblings: 
     if getattr(elm, "name") == "br": 
      break 
     if isinstance(elm, Tag): 
      value += elm.get_text(strip=True) 
     else: 
      value += elm.strip() 

    print(label, value) 
+0

谢谢你。我不知道next_siblings – FancyDolphin

1

您可以使用“.next_sibling”导航到你想要这样的文字:

for i in soup.select("strong"): 
    if i.get_text(strip=True) == "Min. Booking": 
     print(i.next_sibling) #this will print: 7 Days ($148.89) 

参见http://www.crummy.com/software/BeautifulSoup/bs4/doc/#going-sideways

+0

谢谢,因为它更全面,并且完全解决了这个问题,所以我和其他的awnser一起去了。但我很欣赏链接!我看到我在文档中错过了什么。 – FancyDolphin

相关问题