2013-02-28 1 views
9

Я обрабатываю HTML с использованием библиотеки Python и BeautifulSoup 4, и я не могу найти очевидный способ заменить   пробелом. Вместо этого он, похоже, преобразуется в неразрывный пробельный символ Unicode.Как заменить или удалить объекты HTML, такие как « » с помощью BeautifulSoup 4

Я пропустил что-то очевидное? Какой лучший способ заменить & nbsp; с нормальным пространством с помощью BeautifulSoup?

Изменить, чтобы добавить, что я использую последнюю версию, BeautifulSoup 4, поэтому опция convertEntities=BeautifulSoup.HTML_ENTITIES в Beautiful Soup 3 недоступна.

+2

Но это * неиспользуемое пространство ... –

+0

Да, я понимаю, что   - это неразрывное пространство. Итак, вы говорите, что нужно сделать, чтобы получить фрагмент HTML, который я хочу, а затем запустить поиск в Unicode и заменить его? Я думаю, что делает то, что я хочу, я просто подумал, что есть эквивалент старой опции convertEntities. –

ответ

8

См. Entities в документации. BeautifulSoup 4 создает правильный Юникод для всех объектов:

Входящий объект HTML или XML всегда преобразуется в соответствующий символ Юникода.

Да,   превращается в неразрушающий символ пробела. Если вы действительно хотите, чтобы эти символы были символами пробела, вам нужно будет заменить юникод.

15
>>> 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>' 
+0

Это элегантный подход, чтобы выполнить поиск и заменить с помощью formatter. Однако, если бы я не видел, что @Martijn Pieters ответит, это будет немного загадочно, поэтому я буду отмечать его как принятый ответ, поскольку у него есть больше объяснений. –

2

Я бы просто заменил неразрывное пространство на unicode.

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

Преимущество в том, что, хотя вы используете BeautifulSoup, вам не нужно.

Смежные вопросы