Python HTMLParser在&符后忽略数据

时间:2017-07-18 08:51:30

标签: python html parsing

所以我在Python中创建了一个HTML解析器,我希望它能打印出div标签之间的所有信息,但似乎任何没有&符背后的空间的数据都没有。想要打印出来。解析器的代码是:

from HTMLParser import HTMLParser


class Parser(HTMLParser):

    def __init__(self):
        HTMLParser.__init__(self)
        self.dataArray = []
        self.text = []
        self.inLink = False

    def handle_starttag(self, tag, attrs):
        if tag == 'div':
            self.inLink = True
            self.lasttag = tag

    def handle_data(self, data):
        if self.lasttag == 'div' and self.inLink:
            self.text.append(data)

    def handle_entityref(self, name):
        data = self.unescape('&')
        self.text.append(data)

    def handle_endtag(self, tag):
        if tag == 'div':
            self.inlink = False
            self.dataArray.append("".join(self.text))
            self.text = []
            for i in self.dataArray:
                if i == "":
                        self.dataArray.remove(i)


def time_to_parse(your_parser, text_to_parse):
        parser = your_parser
        decoded_text = parser.unescape(text_to_parse)
        parser.feed(decoded_text)
        unicode_data = your_parser.dataArray
        string_data = [i.encode('utf-8') for i in unicode_data]
        print(string_data)

time_to_parse(Parser(), '<div>ll&quot;ll&amp;mmmm</div>')

并打印'll"ll&'。但是,如果我输入'<div>ll&quot;ll&amp; mmmm</div>'作为要解析的文本(&符号后面的空格),则打印出'll"ll& mmmm'罚款。我不明白为什么它处理引号和其他实体罚款而不是&符号,所以我坚持想法:(

0 个答案:

没有答案