Использование Beautiful Soup для удаления тегов HTML из строки - PullRequest
5 голосов
/ 12 декабря 2010

Есть ли у кого-нибудь пример кода, который иллюстрирует, как использовать Beautiful Soup в Python для извлечения всех тегов html, кроме некоторых, из строки текста?

Я хочу удалить все теги javascript и html, кроме:

<a></a>
<b></b>
<i></i>

А также такие вещи, как:

<a onclick=""></a>

Спасибо за помощь - я не мог найти много в интернете для этой цели.

1 Ответ

8 голосов
/ 13 декабря 2010
import BeautifulSoup

doc = '''<html><head><title>Page title</title></head><body><p id="firstpara" align="center">This is <i>paragraph</i> <a onclick="">one</a>.<p id="secondpara" align="blah">This is <i>paragraph</i> <b>two</b>.</html>'''
soup = BeautifulSoup.BeautifulSoup(doc)

for tag in soup.recursiveChildGenerator():
    if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('a','b','i'):
        print(tag)

выходы

<i>paragraph</i>
<a onclick="">one</a>
<i>paragraph</i>
<b>two</b>

Если вам просто нужно текстовое содержимое, вы можете изменить print(tag) на print(tag.string).

Если вы хотите удалить атрибут типа onclick="" из тега a, вы можете сделать это:

if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('a','b','i'):
    if tag.name=='a':
        del tag['onclick']
    print(tag)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...