使用正则表达式在Python中去除文本中的HTML标签
我正在尝试查看一个HTML文件,并把里面的所有标签去掉,只留下文本,但我在使用正则表达式时遇到了问题。这是我目前的代码。
import urllib.request, re
def test(url):
html = str(urllib.request.urlopen(url).read())
print(re.findall('<[\w\/\.\w]*>',html))
这个HTML文件是一个简单的页面,里面有一些链接和文本,但我的正则表达式没有办法匹配到 !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 和 'a href="...." 这些标签。有人能告诉我我需要在正则表达式中做什么修改吗?
2 个回答
-1
这段代码是用来处理某些数据的。它会根据特定的条件来筛选出我们需要的信息。简单来说,就是它会检查每一条数据,看它是否符合我们的要求,如果符合,就把它放到一个新的地方,方便我们后续使用。
在编程中,这种操作很常见,通常我们会用循环来逐条检查数据,然后用条件语句来判断是否符合要求。这样做的好处是可以自动化处理大量数据,节省时间和精力。
总之,这段代码的目的是为了让我们更方便地找到想要的数据,避免手动去一个个查找。
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)
15
使用BeautifulSoup库。使用lxml库。不要用正则表达式来解析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。可以看看lxml.html.clean,了解一下你可以轻松去掉哪些东西。比起正则表达式,这个聪明多了,对吧?另外,要注意unicode编码的问题。你可能会遇到一些HTML无法打印的情况。
2012-11-08:从使用urllib2改为使用requests库。直接使用requests就可以了!