我需要解析某些類名稱的跨度中未命名的br元素之間的某些文本。在這個例子中,我需要0.36,這是在這個例子中的命名屬性「DS」之後。在beautifulsoup中解析一個未命名的元素
這是我的嘗試。
from bs4 import BeautifulSoup
html="""
<pre5 style="">
<br><br>
<span class="field-name">DS :</span>
0.36 [null]<br><br> <br> <span> <b>FC</b> </span><span> : 0.0 </span><br> <br> <span> <b>FDC</b> </span><span> : 0.36 </span><br> <br> <span> <b>LDD</b> </span><span> : 4838400000 </span><br> <br> <span> <b>IFS</b> </span><span> : 0.5333333 </span><br>
</pre5>
"""
soup = BeautifulSoup(html,'lxml')
divTag = soup.find_all("pre5", {"style":""})
for tag in divTag:
tdTags = tag.find_all("span", {"class":"field-name"})
for tag in tdTags:
print tag.text
# print DS :, but I want 0.36
#Alternatively,
soup = BeautifulSoup(html,'lxml')
print str(soup.span.next_sibling.strip()).replace('[null]','')
#prints 0.36 , but I would like to print by making sure that this element actually comes along with DS: and not just by the "immediate next sibilng" - is there a way to respect the named attribute DS and fetch the value for it ?
解析/拆分/替換它通過字符串,會更慢,我可以直接使用樹結構嗎?
編輯,在這種情況下DS的值應該是0.007。無法保證DS將成爲跨班級的第一個元素。
html="""
<pre5 style="">
<br><br>
<span class="field-name">FC :</span>
0.36 [null]<br><br> <br> <span> <b>DS:</b> </span><span> : 0.007 </span><br> <br> <span> <b>FDC</b> </span><span> : 0.36 </span><br> <br> <span> <b>LDD</b> </span><span> : 4838400000 </span><br> <br> <span> <b>IFS</b> </span><span> : 0.5333333 </span><br>
</pre5>
"""
您的代碼仍然假定span class =「field-name」> DS:會先到達。你可以編輯這個以確保如果DS:是跨度類中的第二個,我們仍然會得到「DS」的正確的浮點數 – ekta 2015-02-10 22:09:25
@ekta:我沒有得到新的'xml'數據和你的解釋。你可以編輯你的問題,並添加它來檢查我的解決方案不適合什麼方式? – Birei 2015-02-10 23:16:35
@Birel請參閱上面的編輯 – ekta 2015-02-11 03:35:53