从Python中的字符串中剥离HTML

问题:

from mechanize import Browser
br = 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>'打印“你好”等。

回答:

我总是使用这个功能去剥离HTML标签,因为它只需要Python stdlib:
在Python 2

from HTMLParser import HTMLParser

class 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 HTMLParser

class 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或以上,您需要调用父类的在里面函数。见Using HTMLParser in Python 3.2

 
 Code问答: codewenda.com
Stackoverflow:Strip HTML from strings in Python

发表评论

电子邮件地址不会被公开。 必填项已用*标注

2 + 4 =