首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中使用正则表达式从文本中删除html标记

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

Stack Overflow用户
提问于 2010-01-30 07:22:11
回答 2查看 6.2K关注 0票数 6

我正在尝试查看一个html文件并删除其中的所有标记,以便只留下文本,但我的正则表达式出现了问题。这就是我到目前为止所拥有的。

代码语言:javascript
复制
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="....”标签。谁能解释一下我的正则表达式需要修改什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-30 08:01:35

使用BeautifulSoup。使用lxml。不要使用regular expressions来解析HTML。

编辑2010-01-29:这将是lxml的合理起点:

代码语言:javascript
复制
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。只要使用请求即可!

票数 14
EN

Stack Overflow用户

发布于 2010-01-30 08:29:14

代码语言:javascript
复制
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)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2165943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档