BeautifulSoup парсит XML с HTML контентом - PullRequest
0 голосов
/ 06 января 2020

У меня есть файл XML (формально XBRL), в котором некоторые теги содержат экранированный HTML. Я хотел бы проанализировать документ XML, а затем извлечь HTML из этих тегов. Однако, похоже, что экранированные символы каким-то образом удалены BeautifulSoup. Поэтому, когда я пытаюсь получить mytag.text , все экранированные символы (например, <; </em>) больше не присутствуют. Например:

'&lt;' in raw_text # True
'&lt;' in str(BeautifulSoup(raw_text, 'xml')) # False

Я пытался создать простой пример для воспроизведения проблемы, но я не смог этого сделать, в том смысле, что простой пример, который я хотел привести, работает без любая проблема:

raw_text = '<xmltag><t>&lt;p&gt;test&lt;/p&gt;<t><xmltag>'
soup = BeautifulSoup(raw_text, 'xml')
'&lt;' in str(soup) # True 

Таким образом, вы можете найти файл, который я анализирую здесь: https://drive.google.com/open?id=1lQz1Tfy8u7TBvatP8-QjlnzUi6rNUR79 Код, который я использую:

with open('test.xml', 'r') as fp:
    raw_text = fp.read()
soup = BeautifulSoup(raw_text, 'xml')
mytag = soup.find('QuarterlyFinancialInformationTextBlock')
print(mytag.text[:100])
# prints:            div div style="margin-left:0pt;margin-righ
# original file:     &lt;div&gt; &lt;div style=

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Решения с использованием упрощения c

from simplified_scrapy.simplified_doc import SimplifiedDoc
doc = SimplifiedDoc('<xmltag><t>&lt;p&gt;test&lt;/p&gt;</t></xmltag>')
print (doc.t.html)
print (doc.xmltag.t.html)
print (doc.t.unescape())

результат:

&lt;p&gt;test&lt;/p&gt;
&lt;p&gt;test&lt;/p&gt;
<p>test</p>
0 голосов
/ 07 января 2020

Попробуйте использовать другой синтаксический анализатор для XBRL, например python -xbrl

Проверьте эту ссылку - Анализатор Xbrl, написанный на Python

...