首页 > 编程 > Python > 正文

python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSo

2020-02-23 05:27:30
字体:
来源:转载
供稿:网友

一、利用HTMLParser进行网页解析
具体HTMLParser官方文档可参考http://docs.python.org/library/htmlparser.html#HTMLParser.HTMLParser

1、从一个简单的解析例子开始
例1:
test1.html文件内容如下:

代码如下:
<html>
<head>
<title> XHTML 与 HTML 4.01 标准没有太多的不同</title>
</head>
<body>
i love you
</body>
</html>

下面是能够列出title和body的程序示例:

代码如下:
##@小五义:
##HTMLParser示例
import HTMLParser
class TitleParser(HTMLParser.HTMLParser):
    def __init__(self):
        self.taglevels=[]
        self.handledtags=['title','body'] #提出标签
        self.processing=None
        HTMLParser.HTMLParser.__init__(self)
    def handle_starttag(self,tag,attrs):
        if tag in self.handledtags:
            self.data=''
            self.processing=tag
    def handle_data(self,data):
        if self.processing:
            self.data +=data
    def handle_endtag(self,tag):
        if tag==self.processing:
            print str(tag)+':'+str(tp.gettitle())
            self.processing=None
    def gettitle(self):
        return self.data
fd=open('test1.html')
tp=TitleParser()
tp.feed(fd.read())

运行结果如下:
title: XHTML 与 HTML 4.01 标准没有太多的不同
body:
i love you
程序定义了一个TitleParser类,它是HTMLParser类的子孙。HTMLParser的feed方法将接收数据,并通过定义的HTMLParser对象对数据进行相应的解析。其中handle_starttag、handle_endtag判断起始和终止tag,handle_data检查是否取得数据,如果self.processing不为None,那么就取得数据。

2、解决html实体问题
(HTML 中有用的字符实体)
(1)实体名称
当与到HTML中的实体问题时,上面的例子就无法实现,如这里将test1.html的代码改为:
例2:

代码如下:
<html>
<head>
<title> XHTML 与" HTML 4.01 "标准没有太多的不同</title>
</head>
<body>
i love you×
</body>
</html>

利用上面的例子进行分析,其结果是:
title: XHTML 与 HTML 4.01 标准没有太多的不同

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表