не позволяет find_all () BeautifulSoup преобразовывать экранированные html-теги - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть какой-то текст:

text = <p>&lt;b&gt;test&lt;/b&gt;<br/></p>

, который я читаю с красивый суп 4 :

soup = BeautifulSoup(text, "html.parser") # soup: <p>&lt;b&gt;test&lt;/b&gt;<br/></p>

Затем я хочу получить текстовые узлы:

text_nodes = soup.find_all(text=True)

Но экранированный HTML-код освобождается в процессе: text_nodes: ['<b>test</b>']

Как предотвратить find_all() шаг от конвертации моих сбежавших HTML-тегов?

1 Ответ

0 голосов
/ 03 декабря 2018

С text=True Я думаю, что нет возможности сохранить строку как есть.

Мое решение просто избежать результата с помощью цикла

from bs4 import BeautifulSoup
from html import escape

text = '<p>&lt;b&gt;test&lt;/b&gt;<br/></p>'
soup = BeautifulSoup(text, "html.parser")
text_nodes = [escape(x) for x in soup.strings]
print(text_nodes)
# ['&lt;b&gt;test&lt;/b&gt;']

soup.strings - более короткая версияsoup.find_all(text=True).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...