Python的自带模块——HTMLParser的初步学习
来源:互联网 发布:发淘宝链接如何粘贴 编辑:程序博客网 时间:2024/05/21 12:42
Python的自带模块——HTMLParser的初步学习
- HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析。
本文主要简单讲一下HTMLParser的用法.
使用时需要定义一个从模块
html.parser
中的类HTMLParser
继承的类,重定义函数:handle_starttag( tag, attrs)
handle_startendtag( tag, attrs)
handle_endtag( tag)
handle_data(data)
1. 获取标签属性
tag
是的html标签,attrs
是 (属性,值)元组(tuple
)的列表(list
).
如一个标签为:
<input type="hidden" name="NXX" id="IDXX" value="VXX" />
那么它的attrs
列表为
`[(‘type’, ‘hidden’), (‘name’, ‘NXX’), (‘id’, ‘IDXX’), (‘value’, ‘VXX’)]
HTMLParser
自动将tag
和attrs
都转为小写。
2. 获取标签内容
- 解析时碰到
<***>
,自动调用handle_starttag()
;碰到</***>
,自动调用handle_endtag()
每一个标签,无论
<>
还是</>
,均会调用handle_data()
html中第一行、第二行分别为
<html>
和<head>
,后面无具体数据,只有回车换行,所用调用handle_data()
,打印结果为换行;</html></head>
同理。
3. 一个简单的例子
- 获取豆瓣上正在上映影片的基本信息
# encoding=utf8import requestsfrom html.parser import HTMLParserfrom html.entities import name2codepointclass Myparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.movies = [] def handle_starttag(self, tag, attrs): def _attr(attrlist, attrname): for each in attrlist: if attrname == each[0]: return each[1] return None if tag == 'li' and _attr(attrs, 'data-title'): movie = {} movie['actors'] = _attr(attrs, 'data-actors') movie['director'] = _attr(attrs, 'data-director') movie['duration'] = _attr(attrs, 'data-dutation') movie['title'] = _attr(attrs, 'data-title') movie['rate'] = _attr(attrs, 'data-rate') self.movies.append(movie)def movieparser(url): headers = {} req = requests.get(url) s = req.text myparser = Myparser() myparser.feed(s) myparser.close() return myparser.moviesif __name__ == '__main__': url = 'https://movie.douban.com/' movies = movieparser(url) for each in movies: print('%(title)s|%(rate)s|%(actors)s|%(director)s|%(duration)s' % each)
运行结果:
湄公河行动|8.2|张涵予 / 彭于晏 / 孙淳|林超贤|None圆梦巨人 The BFG|6.7|鲁比·巴恩希尔 / 马克·里朗斯 / 比尔·哈德尔|史蒂文·斯皮尔伯格|None从你的全世界路过|5.5|邓超 / 白百何 / 杨洋|张一白|None暗杀游戏 Мафия: Игра на выживание|4.3|瓦蒂姆·提萨拉提 / 维奥莱塔·吉特孟斯塔雅 / 韦尼亚明·斯梅霍夫|萨里·奥德赛耶|None鲁滨逊漂流记 Robinson Crusoe|5.5|马提亚斯·施维赫夫 / 卡亚·叶娜尔 / 伊尔卡·贝桑|文森特·凯斯特鲁特|None勇士|4.7|李东学 / 于小伟 / 聂远|宁海强|None黑处有什么|6.8|苏晓彤 / 郭笑 / 陆琦蔚|王一淳|None王牌逗王牌|3.6|刘德华 / 黄晓明 / 王祖蓝|王晶|None爵迹|3.7|范冰冰 / 吴亦凡 / 陈学冬|郭敬明|None铠甲勇士捕王|4.1|赖艺 / 王畅唱 / 曲澔濬|郑国伟|None逗鸟外传:萌宝满天飞 Storks|7.7|安迪·萨姆伯格 / 凯蒂·克朗 / 凯尔希·格兰莫|尼古拉斯·斯托勒|None宾虚 Ben-Hur|5.8|杰克·休斯顿 / 纳赞宁·波妮阿蒂 / 摩根·弗里曼|提莫·贝克曼贝托夫|None幽灵医院|2.4|白歆惠 / 李昌熙 / 罗家英|殷国君|NoneT台魔王||朱研 / 班嘉佳 / 侯静文|牛辉|None我是哪吒|4.9|陶典 / 韩娇娇 / 刘垚|舒展|None神兽金刚之青龙再现|5.5|黄健 / 李仲鑫 / 谢安晟|朱晓兵|None疯狂丑小鸭|2.8|苏倩芸 / 王雪沁 / 杨进|蒋叶峰|None樱桃小丸子:来自意大利的少年 ちびまる子ちゃん イタリアから来た少年|7.1|鳕子 / 屋良有作 / 一龙斋贞友|高木淳|None新东方神娃||王燕华 / 王晓彤 / 李晔|殷晓东|None七月与安生|7.6|周冬雨 / 马思纯 / 李程彬|曾国祥|None爱上处女座|4.1|萧蔷 / 贺刚 / 高天|刘观伟|NoneProcess finished with exit code 0
1 0
- Python的自带模块——HTMLParser的初步学习
- python的自带GUI模块Tkinter学习
- 如果Python自带的htmlparser解析失败,请安装lxml或者html5lib来替换自带的parser
- HTMLparser的初步使用
- python学习——HTMLParser
- python的HTMLParser
- 利用python自带的os模块删除windows机器的模块
- Python自带日志模块
- Python自带IDE——IDLE的快捷键
- Python自带IDE——IDLE的快捷键
- Python自带的服务器
- python解析HTML的方法——HTMLParser
- HTMLParser的学习
- Python——HTMLParser
- python实例:用python自带模块Kinter模拟window的运行窗口
- node.js 自带的各种模块
- Django自带加密模块的使用
- UE4 自带的一些模块
- hdu2554N对数的排列问题+数学推论
- Linux命令之"tail"
- Linux成长之路(三)——环境变量和搜索文件
- Mybatis批量添加数据
- linux下使用Makefile编译程序入门介绍
- Python的自带模块——HTMLParser的初步学习
- linux 内核中的开发人员 名单 CREDITS文件
- orcale总结
- screen.width,screen.height
- 55.Git备忘笔记
- java enum(枚举)使用详解 + 总结
- JDBC 事务管理
- android中strings.xml占位符
- UVA 1262编码(第k字典序)