Я хотел бы извлечь текст из файла HTML, используя Python. По сути, я хочу получить такой же вывод, как если бы я скопировал текст из браузера и вставил его в блокнот.
Я хотел бы что-то более надежное, чем использование регулярных выражений, которые могут не работать на плохо сформированном HTML. Я видел, как многие люди рекомендуют Beautiful Soup, но у меня было несколько проблем с его использованием. С одной стороны, он поднял нежелательный текст, такой как источник JavaScript. Кроме того, он не интерпретирует HTML-сущности. Например, я ожидал бы & # 39; в исходном HTML-коде для преобразования в апостроф в тексте, как если бы я вставил содержимое браузера в блокнот.
Обновление html2text
выглядит многообещающе. Он правильно обрабатывает HTML-объекты и игнорирует JavaScript. Тем не менее, он точно не дает простой текст; он производит уценку, которая затем должна быть превращена в простой текст. Он не содержит примеров или документации, но код выглядит чистым.
Смежные вопросы:
источник
Ответы:
html2text - это программа на Python, которая хорошо справляется с этой задачей.
источник
Лучший кусок кода, который я нашел для извлечения текста без получения JavaScript или ненужных вещей:
Вам просто нужно установить BeautifulSoup до:
источник
text = soup.get_text(separator=' ')
soup.get_text()
я использовалsoup.body.get_text()
, чтобы я не получил никакого текста от<head
элемента>, такого как заголовок.from urllib.request import urlopen
ПРИМЕЧАНИЕ: NTLK больше не поддерживает
clean_html
функциюОригинальный ответ ниже и альтернатива в комментариях.
Используйте NLTK
Я потратил 4-5 часов на решение проблем с html2text. К счастью, я мог столкнуться с НЛТК.
Это работает волшебно.
источник
raise NotImplementedError ("To remove HTML markup, use BeautifulSoup's get_text() function")
Я столкнулся с той же проблемой сегодня. Я написал очень простой HTML-парсер для удаления входящего содержимого всех разметок, возвращая оставшийся текст с минимальным форматированием.
источник
&
не будет преобразован в&
, верно?from html.parser import HTMLParser
Вот вариант ответа Xperroni, который является более полным. Он пропускает разделы сценариев и стилей и переводит charrefs (например, & # 39;) и объекты HTML (например, & amp;).
Он также включает в себя тривиальный обратный конвертер простого текста в HTML.
источник
Я знаю, что ответов уже много, но наиболее изящное и питонное решение, которое я нашел, частично описано здесь .
Обновить
Основываясь на комментарии Фрейзера, вот более элегантное решение:
источник
text = ''.join(BeautifulSoup(some_html_string, "lxml").findAll(text=True))
clean_text = ''.join(BeautifulSoup(some_html_string, "html.parser").stripped_strings
Вы также можете использовать метод html2text в библиотеке стрипограмм.
Для установки стрипограммы запустите sudo easy_install stripogram
источник
Есть библиотека шаблонов для интеллектуального анализа данных.
http://www.clips.ua.ac.be/pages/pattern-web
Вы даже можете решить, какие теги оставить:
источник
PyParsing делает отличную работу. Вики PyParsing была убита, так что вот еще одно место, где есть примеры использования PyParsing ( пример ссылки ). Одна из причин, по которой стоит потратить немного времени на pyparsing, заключается в том, что он также написал очень краткое, очень хорошо организованное руководство по сокращенному использованию O'Reilly, которое также недорогое.
Сказав это, я часто использую BeautifulSoup, и это не так сложно для решения проблем сущностей, вы можете преобразовать их, прежде чем запустить BeautifulSoup.
Удачи
источник
Это не совсем решение Python, но оно преобразует текст, сгенерированный Javascript, в текст, что я считаю важным (например, google.com). Ссылки браузера (не Lynx) имеют движок Javascript и преобразуют источник в текст с опцией -dump.
Таким образом, вы можете сделать что-то вроде:
источник
Вместо модуля HTMLParser, проверьте htmllib. У него похожий интерфейс, но он делает больше за вас. (Он довольно древний, поэтому он не очень помогает с точки зрения избавления от javascript и css. Вы можете создать производный класс, но и добавить методы с именами, такими как start_script и end_style (подробности см. В документации по python), но это сложно чтобы сделать это надежно для искаженного HTML.) В любом случае, вот что-то простое, что печатает простой текст на консоли
источник
Я рекомендую пакет Python под названием goose-extractor Goose попытается извлечь следующую информацию:
Основной текст статьи Главное изображение статьи Любые фильмы Youtube / Vimeo, встроенные в статью Мета-теги Описание Мета-теги
Подробнее: https://pypi.python.org/pypi/goose-extractor/
источник
если вам нужна большая скорость и меньшая точность, вы можете использовать raw lxml.
источник
установить html2text используя
затем,
источник
Я знаю, что здесь уже есть множество ответов, но я думаю, что magazine3k также заслуживает упоминания. Недавно мне нужно было выполнить аналогичную задачу по извлечению текста из статей в Интернете, и эта библиотека отлично справилась с этой задачей в своих тестах. Он игнорирует текст, найденный в пунктах меню и боковых панелях, а также любой JavaScript, который появляется на странице по запросу OP.
Если у вас уже есть загруженные файлы HTML, вы можете сделать что-то вроде этого:
В нем даже есть несколько функций НЛП для обобщения тем статей:
источник
Красивый суп превращает HTML-сущности. Вероятно, это ваш лучший выбор, учитывая, что HTML часто содержит ошибки и полон проблем с кодировкой Unicode и HTML. Это код, который я использую для преобразования HTML в необработанный текст:
источник
Другой вариант - запустить html через текстовый веб-браузер и выгрузить его. Например (используя Lynx):
Это можно сделать в скрипте Python следующим образом:
Он не даст вам точно только текст из файла HTML, но в зависимости от вашего варианта использования он может быть предпочтительнее, чем вывод html2text.
источник
Лучше всего у меня работают надписи.
https://github.com/weblyzard/inscriptis
Результаты действительно хороши
источник
Еще одно решение, отличное от Python: Libre Office:
Причина, по которой я предпочитаю этот вариант другим, заключается в том, что каждый абзац HTML преобразуется в одну текстовую строку (без разрывов строк), что я и искал. Другие методы требуют последующей обработки. Рысь дает хороший результат, но не совсем то, что я искал. Кроме того, Libre Office можно использовать для конвертации любых форматов ...
источник
Кто-нибудь пробовал
bleach.clean(html,tags=[],strip=True)
с отбеливателем ? это работает для меня.источник
У меня были хорошие результаты с Apache Tika . Его целью является извлечение метаданных и текста из содержимого, поэтому соответствующий синтаксический анализатор настраивается соответствующим образом из коробки.
Tika может быть запущена как сервер , тривиально запустить / развернуть в контейнере Docker, и оттуда можно получить доступ через привязки Python .
источник
простым способом
этот код находит все части html_text, начинающиеся с '<' и заканчивающиеся '>', и заменяет все найденные пустой строкой
источник
Ответ @ PeYoTIL, использующий BeautifulSoup и исключающий стиль и содержание скриптов, не сработал для меня. Я попробовал, используя
decompose
вместо,extract
но он все еще не работал. Поэтому я создал свой собственный, который также форматирует текст с использованием<p>
тегов и заменяет<a>
теги ссылкой href. Также справляется со ссылками внутри текста. Доступный в этой сущности со встроенным тестовым документом.источник
get_text
просто не сокращает его.В Python 3.x вы можете сделать это очень просто, импортировав пакеты 'imaplib' и 'email'. Хотя это старый пост, но, возможно, мой ответ может помочь новичкам в этом посте.
Теперь вы можете напечатать переменную тела, и она будет в текстовом формате :) Если это достаточно хорошо для вас, было бы неплохо выбрать ее в качестве принятого ответа.
источник
text/plain
часть из электронного письма, если кто-то другой поместил ее туда. Он не делает ничего, чтобы преобразовать HTML в открытый текст, и ничего не делает удаленно, если вы пытаетесь конвертировать HTML, скажем, с веб-сайта.Вы можете извлечь только текст из HTML с BeautifulSoup
источник
Хотя многие люди упоминали об использовании регулярных выражений для удаления тегов HTML, есть много минусов.
например:
Должен быть проанализирован для:
Вот фрагмент, который я придумал, вы можете адаптировать его к вашим конкретным потребностям, и он работает как шарм
источник
Другой пример использования BeautifulSoup4 в Python 2.7.9+
включает:
Код:
Разъяснение:
Считайте данные URL как html (используя BeautifulSoup), удалите все элементы скрипта и стиля, а также получите только текст, используя .get_text (). Разбивать на строки и удалять начальные и конечные пробелы в каждом, а затем разбивать заголовки с несколькими заголовками на строки, каждый чанк = (фраза.strip () для строки в строках для фразы в строке.split ("")). Затем с помощью text = '\ n'.join удалите пустые строки и, наконец, вернитесь как санкционированный utf-8.
Ноты:
В некоторых системах, на которых это работает, произойдет сбой соединения https: // из-за проблемы SSL, вы можете отключить проверку, чтобы устранить эту проблему. Пример исправления: http://blog.pengyifan.com/how-to-fix-python-ssl-certificate_verify_failed/
Python <2.7.9 может иметь некоторые проблемы с этим
text.encode ('utf-8') может оставить странную кодировку, вместо этого может потребоваться просто вернуть str (text).
источник
Вот код, который я использую на регулярной основе.
Надеюсь, это поможет.
источник
Комментарий автора LibreOffice имеет свои достоинства, поскольку приложение может использовать макросы Python. Похоже, что он дает множество преимуществ как для ответа на этот вопрос, так и для расширения базы макросов LibreOffice. Если это разрешение является одноразовой реализацией, а не для использования в качестве части большой производственной программы, открытие HTML в Writer и сохранение страницы в виде текста, похоже, решит проблемы, обсуждаемые здесь.
источник
Perl way (извини мама, я никогда не буду делать это в производстве).
источник