2017-01-03 21 views
0

我試圖從html文件中抓取一些文本,但是我需要兩種類型的文本,它們的標籤中的術語(contextref)互不相同,例如:BeautifulSoup通過html標籤中的2個詞條找到文本 - Python 3

1)<ix:nonfraction contextref="cfwd_30_04_2016" name="ns5:TangibleFixedAssets" unitref="GBP" decimals="0" format="ixt2:numdotdecimal" scale="0" xmlns:ix="http://www.xbrl.org/2008/inlineXBRL">180,649</ix:nonfraction>

2)<ix:nonfraction contextref="cfwd_30_04_2015" name="ns5:TangibleFixedAssets" unitref="GBP" decimals="0" format="ixt2:numdotdecimal" scale="0" xmlns:ix="http://www.xbrl.org/2008/inlineXBRL">200,395</ix:nonfraction>

此刻我的代碼查找的文字是:var1=(soup.find('ix:nonfraction',{'name':'uk-gaap:{}'.format(variable)}).text)這對於上面給出的示例:180649。

對於我能夠得到兩個值,我需要另一個變量,以包括另一個術語以及name,(作爲contextref)我玩過不同的組合,但似乎無法使它工作。

任何幫助將是巨大的,感謝

+0

是這個xml代碼?併發布你想要的輸出。 –

+0

nope,文件都是'.html' 理想的輸出是'var1'將第一個標記= 180,649和'var2'的文本文件包含在第二個= 200,395中。 可能值得注意的是,這兩個標籤不在同一個頭標記 – reuben

回答

0
import bs4 

html = '''<ix:nonfraction contextref="cfwd_30_04_2016" name="ns5:TangibleFixedAssets" unitref="GBP" decimals="0" format="ixt2:numdotdecimal" scale="0" xmlns:ix="http://www.xbrl.org/2008/inlineXBRL">180,649</ix:nonfraction> 
<ix:nonfraction contextref="cfwd_30_04_2015" name="ns5:TangibleFixedAssets" unitref="GBP" decimals="0" format="ixt2:numdotdecimal" scale="0" xmlns:ix="http://www.xbrl.org/2008/inlineXBRL">200,395</ix:nonfraction>''' 

soup = bs4.BeautifulSoup(html, 'lxml') 
var1, var2 = [i.text for i in soup.find_all('ix:nonfraction')] 

出來:

('180,649', '200,395') 

您可以在find_all()使用contextref作爲關鍵字:

soup.find_all('ix:nonfraction', contextref=True) 

這意味着過濾標籤,該標籤具有contextref屬性。

+0

之下,因爲html不僅包含該標籤,還有負載帶有contextref的標籤,因此我得到:'Traceback(最近一次調用最後一個): 文件「test.py」,第58行,在 var1,var2 = [i.text for i in soup.find_all('ix:nonfraction')] ValueError:太多值解包(預計2)' 理想情況下,我需要一個代碼來尋找具體的'ix',''name'和'contextref' – reuben

+0

你應該發佈足夠的數據和輸出格式。 –

相關問題