2016-07-04 18 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

謝謝!解決並代之以你。 –

相關問題