Python学习总结笔记(6)-- HTML解析之HTMLParser
2016-11-22 16:38
666 查看
网页爬虫避免不了要解析html页面,需要获取其中的超链接等信息。HTML本质上也是XML文档,但是其语法没有那么严格,所以不能用XML解析的方法来解析HTML(基于Dom方式解析XML可参见我的博客 Python学习总结笔记(1)–Dom XML操作 )。
关于HTMLParser的详细介绍可以查看官方文档。
运行结果:
0x01 HTMLParser
Python官方提供了一个解析HTML的标准库HTMLParser,分析出HTML里面的标签、数据等。需要指出的是,HTMLParser采用的是事件驱动的方式,即当解析到一个特定的标签时,会触发相应的处理事件,用户通过重写相应事件的处理函数来实现HTML的解析。HTMLParser库中常见的几个处理函数如下:handle_startendtag 处理开始标签和结束标签 handle_starttag 处理开始标签,比如<xx> handle_endtag 处理结束标签,比如</xx> handle_charref 处理特殊字符串,就是以开头的,一般是内码表示的字符 handle_entityref 处理一些特殊字符,以&开头的,比如 handle_data 处理数据,就是<xx>data</xx>中间的那些数据 handle_comment 处理注释 handle_decl 处理<!开头的,比如<!DOCTYPE html ... handle_pi 处理形如<?instruction>的东西
关于HTMLParser的详细介绍可以查看官方文档。
0x02 实例
下面是一个很简单的获取页面全部静态超链接的例子:#/usr/bin/env python #coding:utf-8 __author__ = 'kikay' from HTMLParser import HTMLParser import requests #扩展的HTML解析类(提取全部的超链接) class MyHtmlParserHelper(HTMLParser): def __init__(self): #super(MyHtmlParserHelper,self).__init__() HTMLParser.__init__(self) self.__items=[] self.__href=None self.__text=None self.__flag=False #处理开头 def handle_decl(self, decl): pass #处理开始标签 def handle_starttag(self, tag, attrs): if 'a'==tag and attrs: for key,value in attrs: if 'href'==key: self.__href=value self.__flag=True #处理结束标签 def handle_endtag(self, tag): if 'a'==tag and self.__flag==True: info=('{txt}({hf})').format(txt=self.__text,hf=self.__href) self.__items.append(info) self.__flag=False #处理标签中间的数据 def handle_data(self, data): if self.__flag==True: self.__text=data @property def items(self): return self.__items if __name__=='__main__': url='http://www.baidu.com' response=requests.get(url=url,verify=False) #解析 parser=MyHtmlParserHelper() parser.feed(response.content) items=parser.items for i in items: print i
运行结果:
新闻(http://news.baidu.com) hao123(http://www.hao123.com) 地图(http://map.baidu.com) 视频(http://v.baidu.com) 贴吧(http://tieba.baidu.com) 登录(http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1) 更多产品(//www.baidu.com/more/) 关于百度(http://home.baidu.com) About Baidu(http://ir.baidu.com) 使用百度前必读(http://www.baidu.com/duty/) 意见反馈(http://jianyi.baidu.com/)
0x03 后记
HTMLParser是一个很简单的HTML解析库,功能不算强大,并且还是个很老的库,比如其不支持新式类的继承方式(super写法,见上面的例子),解析静态的HTML页面使用BeautifulSoup等库显然更适合,但是作为一个比较经典的库,了解下还是有必要的。相关文章推荐
- python网络编程学习笔记(7):HTML和XHTML解析(HTMLParser、BeautifulSoup)
- python︱HTML网页解析BeautifulSoup学习笔记
- python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
- python学习笔记三:解析html(HTMLParser、SGMLParser),并抓取图片
- python网络编程学习笔记(7):HTML和XHTML解析(HTMLParser、BeautifulSoup)
- python︱HTML网页解析BeautifulSoup学习笔记
- Python学习笔记(四十)— 内置模块(9)HTMLParser
- python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
- HTMLParser(一个比较流行的html代码解析、处理开源项目)学习,总结
- 解析XML文件总结 分类: python基础学习 python 2013-06-17 12:04 232人阅读 评论(0) 收藏
- Python学习笔记【三】Pyhton的HTML应用
- python网络编程学习笔记(8):XML生成与解析(DOM、ElementTree)
- python模块学习---HTMLParser(解析HTML文档元素)
- python 学习笔记(4)解析和字符串处理
- python网络编程学习笔记:XML生成与解析(DOM、ElementTree)
- HTMLParser解析网页,提取链接地址、标题名称,并插入数据库 分类: python 小练习 HTMLParser 2014-02-19 09:57 519人阅读 评论(0) 收藏
- Python学习笔记—PyQuery库的使用总结
- 使用Python中HTTPParser模块进行简单的html解析
- HTML 学习笔记(总结)
- python模块之HTMLParser: 解析html,获取url