2017-01-03 20 views
0

私はhtmlファイルからいくつかのテキストを削り取ろうとしていますが、例えばタグの中で用語(contextref)を使って2種類のテキストが必要です。 :テキストを見つける瞬間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>

私のコードは:180649:所与上記例についてvar1=(soup.find('ix:nonfraction',{'name':'uk-gaap:{}'.format(variable)}).text)います。

両方の値を取得できるようにするには、namecontextref)と一緒に別の変数を追加する必要があります。違う組み合わせで再生しても動作しないようです。アウト

すべてのヘルプは素晴らしいことだ、感謝

+0

はこのxmlコードですか?あなたが望む出力を投稿することができます。 –

+0

ではありません。ファイルはすべて '.html'です ' var1'が最初のタグ= 180,649と 'var2'のテキストファイルを2番目の= 200,395から含むことが理想的な出力です。 2つのタグが同じヘッドタグ – 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(最新の呼び出し最後): File "test.py"、58行目、 var1、var2 = [souix.find_all(iix:nonfraction)]のiのi.text値 ValueError:アンパックする値が多すぎる(期待値2) ' 理想的には、特定の 'ix'、' name'、および 'contextref'を探すコードが必要です – reuben

+0

十分なデータと出力形式を投稿するべきです。 –

関連する問題