2016-07-04 42 views
0

我是Python和BeautifulSoup的新手。所以请原谅我是否使用了错误的术语。Python/BeautifulSoup - 在同一个标​​记/元素中获取特定属性

我想从具有多个属性的div标签/元素中获取特定的“文本”。

<div class="property-item" data-id="183" data-name="Brittany Apartments" data-street_number="240" data-street_name="Brittany Drive" data-city="Ottawa" data-province="Ontario" data-postal="K1K 0R7" data-country="Canada" data-phone="613-688-2222" data-path="/apartments-for-rent/brittany-apartments-240-brittany-drive-ottawa/" data-type="High-rise-apartment" data-latitude="45.4461070" data-longitude="-75.6465360" > 

下面是我的代码遍历,并找到“属性项”

for btnMoreDetails in citySoup.findAll(attrs= {"class":"property-item"}): 

我的问题是,如果我特别想要的“数据名”和“数据通路”,例如,我该如何着手解决这个问题?

我已经搜索谷歌,甚至这个网站。有人说使用.contents [2]。但我仍然无法得到任何它。

回答

2

一旦你已经提取的元素(findAll做一次一个),仿佛它们是字典键,您可以访问属性。因此,例如下面的代码:

data = """<div class="property-item" data-id="183" data-name="Brittany Apartments" data-street_number="240" data-street_name="Brittany Drive" data-city="Ottawa" data-province="Ontario" data-postal="K1K 0R7" data-country="Canada" data-phone="613-688-2222" data-path="/apartments-for-rent/brittany-apartments-240-brittany-drive-ottawa/" data-type="High-rise-apartment" data-latitude="45.4461070" data-longitude="-75.6465360" >""" 

import bs4 
soup = bs4.BeautifulSoup(data) 
for btnMoreDetails in soup.findAll(attrs= {"class":"property-item"}): 
    print btnMoreDetails["data-name"] 

打印出

Brittany Apartments 
+0

谢谢!解决并代之以你 –

2

如果你想获得data-namedata-path属性,你可以简单地使用类似字典的访问Tag的属性:

for btnMoreDetails in citySoup.findAll(attrs={"class":"property-item"}): 
    print(btnMoreDetails["data-name"]) 
    print(btnMoreDetails["data-path"]) 

请注意,您还可以使用CSS selector匹配物业项目:

for property_item in citySoup.select(".property-item"): 
    print(property_item["data-name"]) 
    print(property_item["data-path"]) 

仅供参考,如果你想看到所有属性使用.attrs property

for property_item in citySoup.select(".property-item"): 
    print(property_item.attrs) 
+0

谢谢!解决并代之以你。 –