Python中HTMLParse模块详解
我们前面用 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 的第三方模块。
作者头像
作者名称
作者性别
评论列表