2017-01-03 7 views
0

나는 html 파일에서 일부 텍스트를 긁어 내려고 노력하고 있습니다. 그러나 태그에서 단어 (contextref)로 서로 다른 2 가지 유형의 텍스트가 필요합니다. : 순간BeautifulSoup html 태그 - 파이썬 3 2 용어를 통해 텍스트를 찾으십시오

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)하는주고 위의 예제 : 180,649.

두 값을 모두 얻을 수 있으려면 name (contextref) ive와 함께 다른 단어를 포함 시키려면 다른 변수가 필요하지만 작동하지 않는 것 같습니다.

어떤 도움이 좋을 것, 감사

+0

이 xml 코드입니까? 원하는 출력을 게시하십시오. –

+0

아니요, 그 파일은 모두'.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 = soup.find_all에 대한 I i.text ('IX : nonfraction')]에 에 ValueError은 : 너무 많은 값 (예상 2) ' 을 풀고 이상적으로는 특정'ix','name' 및'contextref'를 찾기위한 코드가 필요합니다. – reuben

+0

충분한 데이터와 출력 형식을 게시해야합니다. –