Intereting Posts
Двойная пунктирная рамка при использовании colspan JAWS не объявляет арию, описанную в поле выбора в IE Показать экран загрузки при навигации между маршрутами в Angular 2 Как получить xpath, щелкнув элемент html JQUERY AJAX для каждого пользовательского атрибута цикла скрыть полосу прокрутки, пока она еще доступна для прокрутки с помощью мыши / клавиатуры Как заставить текстовое поле принимать только цифры? RWD: показать версию рабочего стола в мобильном мини-формате, без горизонтальной прокрутки Как извлечь точные tags в scrapy Комплексные Divs (float / clear) – Два основных столбца + меньшие внутренние столбцы Как отображать акценты над словами с разными цветами в HTML / CSS? Значок Apple touch не отображается на главном экране Почему iOS Safari добавляет дополнительный интервал между буквами? Селектор CSS для получения последнего видимого div Как вертикально выровнять текст во встроенном блоке td?

Удаление html-тегов из текста с использованием регулярного выражения в python

Я пытаюсь посмотреть на html-файл и удалить из него все tags, чтобы остался только текст, но у меня проблема с моим регулярным выражением. Это то, что у меня есть до сих пор.

import urllib.request, re def test(url): html = str(urllib.request.urlopen(url).read()) print(re.findall('',html)) 

Html – простая страница с несколькими ссылками и текстом, но мое регулярное выражение не заберет! DOCTYPE HTML PUBLIC “- // W3C // DTD HTML 4.01 Transitional // EN” и ‘a href = “….” tags. Может ли кто-нибудь объяснить, что мне нужно изменить в моем регулярном выражении?

Используйте BeautifulSoup . Используйте lxml . Не используйте регулярные выражения для анализа HTML.


Edit 2010-01-29: Это будет разумной отправной точкой для lxml:

 from lxml.html import fromstring from lxml.html.clean import Cleaner import requests url = "https://stackoverflow.com/questions/2165943/removing-html-tags-from-a-text-using-regular-expression-in-python" html = requests.get(url).text doc = fromstring(html) tags = ['h1','h2','h3','h4','h5','h6', 'div', 'span', 'img', 'area', 'map'] args = {'meta':False, 'safe_attrs_only':False, 'page_structure':False, 'scripts':True, 'style':True, 'links':True, 'remove_tags':tags} cleaner = Cleaner(**args) path = '/html/body' body = doc.xpath(path)[0] print cleaner.clean_html(body).text_content().encode('ascii', 'ignore') 

Вы хотите контент, поэтому, вероятно, вам не нужен javascript или CSS. Кроме того, предположительно, вы хотите получить только контент в теле, а не HTML с головы. Прочитайте файл lxml.html.clean, чтобы узнать, что вы можете легко удалить. Путь умнее регулярных выражений, нет?

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


2012-11-08: изменилось с использования urllib2 на запросы . Просто используйте запросы!

 import re patjunk = re.compile("< .*?>| |&",re.DOTALL|re.M) url="http://www.yahoo.com" def test(url,pat): html = urllib2.urlopen(url).read() return pat.sub("",html) print test(url,patjunk)