標題是一口,但描述了我想要的。我正在使用 BeautifulSoup 決議 XML。我的 XML 格式如下:
<properties>
<place>
<house_id>12345</house_id>
<appliances>Fridge, Oven</appliances>
<price>350000</price>
</place>
<place>
<house_id>6789</house_id>
<appliances>Heater, Microwave, Fridge</appliances>
<price>870000</price>
</place>
</properties>
給定house_id標簽的特定值,我想要appliances對應于該位置的文本 INSIDE 。例如,給定12345,我想回傳Fridge, Oven。我還沒有找到使用 BeautifulSoup 的簡單方法。
uj5u.com熱心網友回復:
根據您輸入的 XML,以下 XPath 運算式將生成您需要的內容。
我們可以在 BeautifulSoup 中使用 XPath 嗎?
XPath
/properties/place[house_id="12345"]/appliances
uj5u.com熱心網友回復:
您可以使用General Sibling Combinator ( ~):
soup.select_one("house_id:-soup-contains('12345') ~ appliances").text
或者你可以找到<house_id>包含特定文本的標簽,然后呼叫find_next()定位<appliances>標簽:
print(soup.find("house_id", text="12345").find_next("appliances").text)
uj5u.com熱心網友回復:
即使<appliances>標記在<house_id>.
使用findParent()找到的父母<house_id>,然后找到該標簽<appliances>在父。
這是代碼
from bs4 import BeautifulSoup
s = """
<properties>
<place>
<house_id>12345</house_id>
<appliances>Fridge, Oven</appliances>
<price>350000</price>
</place>
<place>
<house_id>6789</house_id>
<appliances>Heater, Microwave, Fridge</appliances>
<price>870000</price>
</place>
<place>
<appliances>Oven, Cleaner, Microwave</appliances>
<price>700000</price>
<house_id>1296</house_id>
</place>
</properties>"""
soup = BeautifulSoup(s, 'xml')
def get_appliance(t, soup):
h = soup.find('house_id', text=t)
appliance = h.findParent().find('appliances')
return appliance.text
print(get_appliance('12345', soup))
print(get_appliance('1296', soup))
Fridge, Oven
Oven, Cleaner, Microwave
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/342540.html
