Отфильтруйте теги HTML и разрешите сущности в Python - PullRequest
18 голосов
/ 01 сентября 2008

Поскольку меня пугают регулярные выражения, я пытаюсь найти способ удалить все теги HTML и разрешить объекты HTML из строки в Python.

Ответы [ 8 ]

40 голосов
/ 01 сентября 2008

Используйте lxml , которая является лучшей библиотекой xml / html для python.

import lxml.html
t = lxml.html.fromstring("...")
t.text_content()

А если вы просто хотите очистить html, посмотрите на модуль lxml.html.clean

16 голосов
/ 01 сентября 2008

Используйте BeautifulSoup ! Это идеально подходит для этого, когда у вас есть входящая разметка сомнительной добродетели и вам нужно извлечь из этого что-то разумное. Просто передайте исходный текст, извлеките все строковые теги и соедините их.

6 голосов
/ 01 сентября 2008

Хотя я согласен с Лукасом в том, что регулярные выражения не так уж страшны, я все же думаю, что вам следует использовать специализированный HTML-анализатор. Это связано с тем, что стандарт HTML достаточно сложен (особенно если вы хотите произвольно анализировать «HTML» страницы, извлеченные из Интернета), поэтому вам потребуется написать много кода для обработки угловых случаев. Кажется, что Python включает в себя один из коробки .

Вы также должны проверить привязки Python для TidyLib , которые могут очистить битый HTML, делая вероятность успеха любого HTML-анализа намного выше.

4 голосов
/ 01 сентября 2008

Как насчет анализа данных HTML и извлечения данных с помощью парсера?

Я бы попробовал что-то подобное автору, описанному в главе 8.3 книги Dive Into Python

2 голосов
/ 28 февраля 2011

если вы используете Django, вы также можете использовать http://docs.djangoproject.com/en/dev/ref/templates/builtins/#striptags ;)

1 голос
/ 01 сентября 2008

Вам может понадобиться что-то более сложное, чем регулярное выражение. Веб-страницы часто имеют угловые скобки, которые не являются частью тега, например:

 <div>5 < 7</div>

Удаление тегов с помощью регулярного выражения вернет строку "5" и обработает

 < 7</div>

в виде одного тега и удалите его.

Я предлагаю поискать уже написанный код, который сделает это за вас. Я выполнил поиск и обнаружил следующее: http://zesty.ca/python/scrape.html Он также может разрешать HTML-объекты.

0 голосов
/ 02 сентября 2008

Глядя на количество смысла, которое люди демонстрируют в других ответах, я бы сказал, что использование регулярных выражений, вероятно, не лучшая идея для вашей ситуации. Пойдите для чего-то проверенного и испытанного, и рассматривайте мой предыдущий ответ как демонстрацию того, что регулярные выражения не должны быть , что страшно.

0 голосов
/ 01 сентября 2008

Регулярные выражения не страшны, но написание собственных регулярных выражений для удаления HTML - верный путь к безумию (и оно тоже не будет работать). Следуйте по пути мудрости и используйте одну из множества хороших библиотек HTML-парсинга.

Пример Лукаса также не работает, потому что «sub» не является методом строки Python. Вам нужно будет "импортировать re", а затем вызвать re.sub (pattern, repl, string). Но это ни здесь, ни там, поскольку правильный ответ на ваш вопрос не предполагает написания каких-либо регулярных выражений.

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