Отфильтруйте теги HTML и разрешите сущности в Python
Поскольку регулярные выражения меня пугают, я пытаюсь найти способ удалить все теги HTML и разрешить объекты HTML из строки в Python.
8 ответов
Используйте BeautifulSoup! Это идеально подходит для этого, когда у вас есть входящая разметка сомнительной добродетели и вам нужно извлечь из этого что-то разумное. Просто передайте исходный текст, извлеките все строковые теги и присоединитесь к ним.
Хотя я согласен с Лукасом в том, что регулярные выражения не так уж страшны, я все же думаю, что вам следует использовать специализированный HTML-парсер. Это связано с тем, что стандарт HTML достаточно сложен (особенно если вы хотите произвольно анализировать "HTML" страницы, извлеченные из Интернета), что вам потребуется написать много кода для обработки угловых случаев. Кажется, что Python включает в себя один из коробки.
Вам также следует проверить привязки Python для TidyLib, которые могут очистить поврежденный HTML, что значительно увеличивает вероятность успеха любого HTML-анализа.
Как насчет анализа данных HTML и извлечения данных с помощью парсера?
Я бы попробовал что-то наподобие автора, описанного в главе 8.3 книги Dive Into Python.
Если вы используете django, вы также можете использовать http://docs.djangoproject.com/en/dev/ref/templates/builtins/;)
Вам может понадобиться что-то более сложное, чем регулярное выражение. Веб-страницы часто имеют угловые скобки, которые не являются частью тега, например:
<div>5 < 7</div>
Удаление тегов с помощью регулярного выражения вернет строку "5 " и обработает
< 7</div>
как один тег и раздеть его.
Я предлагаю поискать уже написанный код, который сделает это за вас. Я сделал поиск и нашел это: http://zesty.ca/python/scrape.html Он также может разрешать HTML-сущности.
Глядя на количество смысла, которое люди демонстрируют в других ответах, я бы сказал, что использование регулярных выражений, вероятно, не лучшая идея для вашей ситуации. Пойдите для чего-то проверенного и испытанного, и рассматривайте мой предыдущий ответ как демонстрацию того, что регулярные выражения не должны быть такими страшными.
Регулярные выражения не страшны, но написание собственных регулярных выражений для удаления HTML- верный путь к безумию (и это тоже не сработает). Следуйте по пути мудрости и используйте одну из многих хороших библиотек HTML-парсинга.
Пример Лукаса также не работает, потому что "sub" не является методом строки Python. Вам нужно будет "импортировать re", а затем вызвать re.sub (pattern, repl, string). Но это ни здесь, ни там, поскольку правильный ответ на ваш вопрос не предполагает написания каких-либо регулярных выражений.