《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情




HTMLParser

阅读:227568829    分享到

我们前面用 urllib2 爬取了 老鸟python 首页,第二步就是解析该 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 的第三方模块。

作业

上网查一下 beautifulsoup 和 xpath。


如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论

user_image
青山牧云人
2020年8月8日 14:12 回复

我是大学生,我爱学习编程


user_image
李元华
2019年9月11日 02:14 回复

同志们好,我是研究生,见笑了


user_image
feemung
2018年12月28日 22:59 回复

老师好,老师辛苦了