在python中使用正则表达式从文本中删除html标记

在python中使用正则表达式从文本中删除html标记,python,html,regex,tags,Python,Html,Regex,Tags,我试图查看一个html文件并删除其中的所有标记,这样只剩下文本,但我的正则表达式有问题。这就是我目前所拥有的 import urllib.request, re def test(url): html = str(urllib.request.urlopen(url).read()) print(re.findall('<[\w\/\.\w]*>',html)) 导入urllib.request,重新 def测试(url): html=str(urllib.request.urlo

我试图查看一个html文件并删除其中的所有标记,这样只剩下文本,但我的正则表达式有问题。这就是我目前所拥有的

import urllib.request, re
def test(url):
html = str(urllib.request.urlopen(url).read())
print(re.findall('<[\w\/\.\w]*>',html))
导入urllib.request,重新
def测试(url):
html=str(urllib.request.urlopen(url.read())
打印(关于findall(“”,html))
html是一个简单的页面,有一些链接和文本,但我的正则表达式不会出现!DOCTYPE HTML PUBLIC“-//W3C//DTD HTML4.01过渡//EN”和“a href=“…”标记。有人能解释我需要在正则表达式中更改什么吗?

使用。使用。不要使用解析HTML


编辑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。继续读下去,看看你能轻易去掉什么。比正则表达式聪明多了,不是吗

另外,还要注意unicode编码问题。您很容易得到无法打印的HTML


2012-11-08:从使用urllib2更改为。只需使用请求

重新导入
import re
patjunk = re.compile("<.*?>|&nbsp;|&amp;",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)
patjunk=re.compile(“| |&;”,re.DOTALL | re.M) url=”http://www.yahoo.com" def测试(url,pat): html=urllib2.urlopen(url.read()) 返回pat.sub(“,html) 打印测试(url、垃圾邮件)
你说用正则表达式解析HTML有问题吗?哎呀,我简直不敢相信!谁会想到!这些书出现了多大的变化啊!附言:美丽的乌苏。保持冷静,波宾斯。慢慢地往纸袋里呼吸。进来,出去,进来,出去。。。我喜欢这些问题出现的规律性。这就像新问题表单中的“查找类似问题”部分不起作用:如果你花一点时间在上面,你会发现有无数更好的方法来解析HTML,而正则表达式不是其中之一。是的,如果你处理的是宇宙中HTML文档的极小子集,你对它们的格式有着完美的了解。OP的要求很简单,删除所有标签。不需要漂亮的汤。这是OP可能会考虑的两个明显的问题,但是从问题中省略了:文档部分(头部和身体-身体?)和JavaScript(OP是否考虑JavaScript内容的一部分?)。使用BeautifulSoup和lxml,这些都将很容易控制。正则表达式根本不会处理这些。我相信这将处理所有HTML实体:&([a-z]{1,5})|(#\d{1,4}));'