Pytanie Jak mogę zastąpić lub usunąć elementy HTML takie jak "& nbsp;" używając BeautifulSoup 4


Przetwarzam HTML za pomocą Pythona i biblioteki BeautifulSoup 4 i nie mogę znaleźć oczywistego sposobu na zastąpienie   z przestrzenią. Zamiast tego wydaje się, że jest konwertowany na znak spacji Unicode.

Czy brakuje mi czegoś oczywistego? Jaki jest najlepszy sposób na zastąpienie & nbsp; z normalną przestrzenią za pomocą BeautifulSoup?

Edytuj, aby dodać, że używam najnowszej wersji, BeautifulSoup 4, więc convertEntities=BeautifulSoup.HTML_ENTITIES opcja w pięknej zupie 3 jest niedostępna.


13
2018-02-28 14:47


pochodzenie


Ale to jest Niesprzecinająca się przestrzeń ... - Martijn Pieters♦
Tak, zdaję sobie sprawę, & nbsp; to nie łamanie przestrzeni. Więc mówisz, że właściwym rozwiązaniem jest pobranie potrzebnego fragmentu kodu HTML, a następnie uruchomienie wyszukiwania i zamiany kodu Unicode? Myślę, że to, co chcę, po prostu myślałem, że istnieje odpowiednik starej opcji convertEntities. - Richard Neish


Odpowiedzi:


Widzieć Jednostki w dokumentacji. BeautifulSoup 4 produkuje odpowiedni Unicode dla wszystkich podmiotów:

Nadchodząca encja HTML lub XML jest zawsze konwertowana na odpowiedni znak Unicode.

Tak,   zamieniany jest w nierozdzielający znak spacji. Jeśli naprawdę chcesz, aby były to spacje, musisz zastąpić unicode.


11
2018-02-28 15:00





>>> soup = BeautifulSoup('<div>a&nbsp;b</div>')
>>> soup.prettify(formatter=lambda s: s.replace(u'\xa0', ' '))
u'<html>\n <body>\n  <div>\n   a b\n  </div>\n </body>\n</html>'

17
2018-02-28 15:00



Jest to eleganckie podejście polegające na wyszukiwaniu i zamianie za pomocą formatyzatora <code> </ code>. Gdybym jednak nie widział odpowiedzi na @Martijna Pietersa, byłoby to trochę tajemnicze, więc zaznaczę jego jako akceptowaną odpowiedź, ponieważ ma więcej wyjaśnień. - Richard Neish


Po prostu zamieniłbym przestrzeń nie łamającą na kod Unicode.

nonBreakSpace = u'\xa0'
soup = soup.replace(nonBreakSpace, '')

Korzyścią jest to, że nawet jeśli używasz BeautifulSoup, nie musisz tego robić.


5
2017-12-28 00:46