Как заставить BeautifulSoup «понять» плюсовую HTML-сущность - PullRequest
2 голосов
/ 12 апреля 2019

Допустим, у нас есть html файл, подобный этому:

test.html

<div>
<i>Some text here.</i>
Some text here also.<br>
2 &plus; 4 = 6<br>
2 &lt; 4 = True
</div>

Если я передам этот html в BeautifulSoup он выйдет из знака & рядом с сущностью plus, а вывод html будет выглядеть примерно так:

<div>
<i>Some text here.</i>
Some text here also.<br>
2 &amp;plus 4 = 6<br>
2 &lt; 4 = True
</div>

Пример python3 код:

from bs4 import BeautifulSoup

with open('test.html', 'rb') as file:
    soup = BeautifulSoup(file, 'html.parser')

print(soup)

Как я могу избежать этого поведения?

1 Ответ

3 голосов
/ 12 апреля 2019

Прочитайте описание различных библиотек синтаксического анализатора: https://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser:

Это может решить вашу проблему:

s = '''
<div>
<i>Some text here.</i>
Some text here also.<br>
2 &plus; 4 = 6<br>
2 &lt; 4 = True
</div>'''

soup = BeautifulSoup(s, 'html5lib')

И вы получите:

>>> soup

<html><head></head><body><div>
<i>Some text here.</i>
Some text here also.<br/>
2 + 4 = 6<br/>
2 &lt; 4 = True
</div></body></html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...