Python HtmlPasser忽略符号后面的数据

Python HtmlPasser忽略符号后面的数据,python,html,parsing,Python,Html,Parsing,因此,我用Python制作了一个HTML解析器,我希望它能够打印出div标记之间的所有信息,但似乎任何在符号后面没有空格的数据都不希望打印出来。解析器的代码是: from HTMLParser import HTMLParser class Parser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.dataArray = [] self.text =

因此,我用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>')
从HTMLParser导入HTMLParser
类解析器(HTMLParser):
定义初始化(自):
HTMLPasser.\uuuuu初始化\uuuuuuuuu(自)
self.dataArray=[]
self.text=[]
self.inLink=False
def句柄\u开始标记(自身、标记、属性):
如果标记=='div':
self.inLink=True
self.lasttag=tag
def句柄_数据(自身、数据):
如果self.lasttag=='div'和self.inLink:
self.text.append(数据)
def handle_entityref(自身,名称):
data=self.unescape(“&;”)
self.text.append(数据)
def handle_endtag(self,tag):
如果标记=='div':
self.inlink=False
self.dataArray.append(“.join(self.text))
self.text=[]
对于self.dataArray中的i:
如果i==“”:
self.dataArray.remove(i)
def time_to_parse(您的_解析器,text_to_parse):
parser=您的解析器
decoded_text=parser.unescape(text_to_parse)
parser.feed(已解码的_文本)
unicode\u data=您的\u parser.dataArray
string_data=[i.encode('utf-8')表示unicode_数据中的i]
打印(字符串\u数据)
解析时间(Parser(),'ll“ll&;mmmm')

这会打印出
'll“ll&'
。但是,如果我输入
'll“ll&;mmmm'
作为要解析的文本(与符号后面的空格),它将打印出
'll“ll&mmmm'
很好。我不明白为什么它处理引号和其他实体很好,但不处理符号,所以我的想法太多了:(

首先,我不熟悉
HTMLParser
模块。但是,将
self.text.append(data)
更改为
self.text.append(data+name)
在你的
handle\u entityref
函数上。谢谢@Himal,效果很好。我仍然不明白为什么,所以如果有人能解释一下,那将非常有用。首先,我不熟悉
HTMLParser
模块。但是,将
self.text.append(数据)
更改为
self.text.append(数据+名称)
在你的
handle\u entityref
函数上。谢谢@Himal,效果很好。我还是不明白为什么,所以如果有人能解释一下,那将非常有用。