Python HtmlPasser忽略符号后面的数据
因此,我用Python制作了一个HTML解析器,我希望它能够打印出div标记之间的所有信息,但似乎任何在符号后面没有空格的数据都不希望打印出来。解析器的代码是: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 =
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"ll&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,效果很好。我还是不明白为什么,所以如果有人能解释一下,那将非常有用。