为了账号安全,请及时绑定邮箱和手机立即绑定

从Python中的字符串中剥离HTML

从Python中的字符串中剥离HTML

蓝山帝景 2019-06-18 16:05:53
从Python中的字符串中剥离HTMLfrom mechanize import Browserbr = Browser()br.open('http://somewebpage')html = br.response().readlines()for line in html:   print line在HTML文件中打印一行时,我试图找到一种方法只显示每个HTML元素的内容,而不是格式本身。如果它发现'<a href="whatever.com">some text</a>',它只会打印“一些文本”,'<b>hello</b>'打印“你好”等等。你会怎么做呢?
查看完整描述

5 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

我总是使用这个函数来去掉HTML标记,因为它只需要Pythonstdlib:

关于Python 2

from HTMLParser import HTMLParserclass MLStripper(HTMLParser):
    def __init__(self):
        self.reset()
        self.fed = []
    def handle_data(self, d):
        self.fed.append(d)
    def get_data(self):
        return ''.join(self.fed)def strip_tags(html):
    s = MLStripper()
    s.feed(html)
    return s.get_data()

用于Python 3

from html.parser import HTMLParserclass MLStripper(HTMLParser):
    def __init__(self):
        self.reset()
        self.strict = False
        self.convert_charrefs= True
        self.fed = []
    def handle_data(self, d):
        self.fed.append(d)
    def get_data(self):
        return ''.join(self.fed)def strip_tags(html):
    s = MLStripper()
    s.feed(html)
    return s.get_data()

*这只适用于3.1。对于3.2或更高版本,您需要调用父类的依尼特功能。看见在Python3.2中使用HTMLParser


查看完整回答
反对 回复 2019-06-18
?
动漫人物

TA贡献1815条经验 获得超10个赞

我没有想过它会错过多少案例,但是您可以做一个简单的正则表达式:

re.sub('<[^<]+?>', '', text)

对于那些不理解regex的人,这将搜索一个字符串。<...>,其中的内部内容由一个或多个(+)不是<..这个?意味着它将匹配它能找到的最小字符串。例如,给出<p>Hello</p>,它会匹配的<'p></p>分别与?..如果没有它,它将匹配整个字符串。<..Hello..>.

如果非标签<出现在html中(例如。2 < 3),它应该写成转义序列&...总之所以^<可能没必要。


查看完整回答
反对 回复 2019-06-18
  • 5 回答
  • 0 关注
  • 873 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信