关于Python中HTMLParser使用的一些小疑问

本文通过实践探索HTMLParser中handle_data方法的作用。发现该方法用于处理标签间的任意数据,包括文本及换行符等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天在学习HTMLParser的使用,示例代码上都是实现那几个以handle开头的方法来实现特定功能的。handle_starttag和handle_endtag分别是在处理标签开始和结束时调用的。但是对于handle_data这个函数就不太清楚了。在网上找到的文档是这么写的:“This method is called to process arbitrary data”,翻译过来就是“调用方法处理任意数据”。对于这里的任意数据,我表示不太理解。本着多动手的原则,我就写了一段代码来测试一下。代码如下:

from HTMLParser import HTMLParser

class MyParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)

    def handle_starttag(self, tag, attrs):
        print tag

    def handle_data(self, data):
        print 'process'

    def handle_endtag(self, tag):
        print tag


file = open('hehehe.txt','r')
data = file.read()
file.close()
mp = MyParser()
mp.feed(data)

hehehe.txt如下:

<html>
<head>
<title>sdfadf</title>
</head>
<body>
<span>123</span>
<div>123</div>
<span>123</span>
</body>
</html>

结果:

html
process
head
process
title
process
title
process
head
process
body
process
span
process
span
process
div
process
div
process
span
process
span
process
body
process
html


但是当我把所有标签写到一行,也就是

<html><head><title>sdfadf</title></head><body><span>123</span><div></div><span>123</span></body></html>
输出结果为:

html
head
title
process
title
head
body
span
process
span
div
div
span
process
span
body
html


观察结果:当两个标签之间没有任何东西时,程序并没有打印出“process”,反过来也就是说只有相邻两个标签之间有内容(“换行符也算”),程序就会打印出“process”,也就是调用了handle_data函数。若有不当之处,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值