Mam jakiś tekst:

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

Czytałem z piękną zupą 4:

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

Następnie chcę uzyskać węzły tekstowe:

text_nodes = soup.find_all(text=True)

Ale kod, którego kod został zmieniony, zostaje w trakcie tego procesu pozbawiony ucieczki: text_nodes: ['<b>test</b>']

Jak zapobiec konwersji kroku find_all() moich znaczników ze znakami ucieczki HTML?

1
43Tesseracts 3 grudzień 2018, 08:44

1 odpowiedź

Najlepsza odpowiedź

W przypadku text=True myślę, że nie ma opcji, aby zachować ciąg bez zmian.

Moje rozwiązanie to po prostu uciec od wyniku za pomocą pętli

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.stringsto krótsza wersja soup.find_all(text=True).

1
ewwink 3 grudzień 2018, 14:09