2017-01-03 4 views
0

Я пытаюсь очистить текст из html-файла, однако мне нужно два типа текста, которые отличаются друг от друга термином (contextref) в своих тегах, например :BeautifulSoup найти текст через 2 термина в теге html - 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), который для указанных выше Привести примеры: 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') 

вы можете использовать contextref в качестве ключевого слова в find_all():

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

Это означает, что фильтровать тег имеет атрибут contextref.

+0

, потому что html не содержит только этот тег, есть множество тегов с contextref, в результате чего получается: «Traceback (последний последний вызов): Файл "test.py", строка 58, в var1, var2 = [i.text для I в soup.find_all ('IX: nonfraction')] ValueError: слишком много значений для распаковки (ожидается 2) ' В идеале мне понадобится код для поиска конкретных 'ix',' name' и 'contextref' – reuben

+0

, вам следует разместить достаточно данных и формата вывода. –