我们前面用 urllib2 爬取了 老鸟python
首页,第二步就是解析该 HTML
页面,比如看看里面的内容到底是文本,图片还是视频等等。HTML 本质上是 XML 的子集,但是 HTML 的语法没有
XML 那么严格,所以不能用标准的 DOM 或 SAX 来解析 HTML,Python 提供了 HTMLParser 来非常方便地解析 HTML。
我们只需要定义一个 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。
我是大学生,我爱学习编程