Python中HTMLParse模块详解

admin 阅读:69 2024-02-29

我们前面用 urllib2 爬取了网站页面,第二步就是解析该 HTML 页面,比如看看里面的内容到底是文本,图片还是视频等等。HTML 本质上是 XML 的子集,但是 HTML 的语法没有 XML 那么严格,所以不能用标准的 DOM 或 SAX 来解析 HTML,Python 提供了 HTMLParser 来非常方便地解析 HTML。

使用 HTMLParser

我们只需要定义一个 HTMLParser 的子类,然后重写一些函数,就可以解析网页了。

from html.parser import HTMLParser

class MyHtmlParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("<%s>" % tag)

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

    def handle_starendtag(self, tag, attrs):
        print("<%s>" % tag)

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

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

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

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

parser = MyHtmlParser()
html = "<html><head></head><body><p>python</p></body>"
parser.feed(html)

feed 函数可以多次调用,也就是不一定一次把整个 HTML 字符串都塞进去,可以一部分一部分塞进去。

from html.parser import HTMLParser

class MyHtmlParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("<%s>" % tag)

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

    def handle_starendtag(self, tag, attrs):
        print("<%s>" % tag)

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

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

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

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

parser = MyHtmlParser()
htmlone = "<html><head></head><body>"
htmltwo = "<p>python</p></body>"
parser.feed(htmlone)
parser.feed(htmltwo)

我们解析 html 有更多的更好用的第三方模块,比如 beautifulsoup,xpath 等等,我们在爬虫阶段详细介绍这些模块,对于 Python 内置的 HtmlParser 模块,作为了解内容即可。

本节重要知识点

会使用 HtmlParser 解析简单的网页。

了解一下其它解析 html 的第三方模块。

声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!

搜索