← 返回首页
Python3基础教程(六十五)
发表时间:2022-04-27 12:01:21
HTMLParser

HTMLParser模块主要是用来解析HTML文件(包括HTML中无效的标记)。

我们知道python特别擅长编写爬虫程序把目标网站的页面抓下来,那么我们该如何解析HTML呢?

1.HTMLParser HTML本质上是XML的子集,但是HTML的语法没有XML那么严格,所以不能用标准的DOM或SAX来解析HTML。 好在Python提供了HTMLParser来非常方便地解析HTML,只需简单几行代码就可以搞定!

HTMLParser常用方法如下: - handle_startendtag//处理开始标签和结束标签(即单标签) - handle_starttag//处理开始标签,比如 - handle_endtag//处理结束标签,比如 - handle_charref//处理特殊字符串,就是以&#开头的,一般是内码表示的字符 - handle_entityref//处理一些特殊字符,以&开头的,比如   - handle_data//处理数据,就是data中间的那些数据 - handle_comment//处理注释 - handle_decl//处理<!开头的,比如<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" - handle_pi//处理形如<?instruction>的东西

实例:

# -*- coding: utf-8 -*-
# @Time : 2022/4/28 17:26
# @File : htmlparserdemo.py
# @Software : PyCharm

from html.parser import HTMLParser
from html.entities import name2codepoint


class MyHTMLParser(HTMLParser):

    def __init__(self):
        HTMLParser.__init__(self)
        # 定义data数组⽤来存储html中的数据
        self.links = []
        self.data = []

    def handle_starttag(self, tag, attrs):
        print('<%s' % tag, end=' ')
        if len(attrs) == 0:
            pass
        else:
            for (variable, value) in attrs:
                print('%s = "%s"' % (variable, value), end='')
                if variable == "href":
                    self.links.append(value)

        print('>')

    def handle_endtag(self, tag):
        print('</%s>' % tag)

    def handle_startendtag(self, tag, attrs):
        print('<%s/>' % tag)

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

    def handle_comment(self, data):
        print('<!--', data, '-->')

    def handle_entityref(self, name):
        print('&%s;' % name)

    def handle_charref(self, name):
        print('&#%s;' % name)


parser = MyHTMLParser()
parser.feed('''<html lang="en">
<head></head>
<body>
<!-- 这里是注解 -->
<p>Some <a href=\"https://www.baidu.com\">百度</a> HTML&nbsp;tutorial...<br>END</p>
</body></html>''')

运行结果:

<html lang = "en">


<head >
</head>


<body >


<!--  这里是注解  -->


<p >
Some 
<a href = "https://www.baidu.com">
百度
</a>
 HTML tutorial...
<br >
END
</p>


</body>
</html>

特殊字符有两种,一种是英文表示的 ,一种是数字表示的Ӓ,这两种字符都可以通过Parser解析出来。

小结: 使用HTMLParser模块可以把网页中的文本、图像等解析出来。