python自带的用于解析HTML的库HtmlParser
转自博客https://www.cnblogs.com/masako/p/5868367.html
HtmlParser,顾名思义,是解析Html的一个工具。python自带的。
一、常用属性和方法介绍
HtmlParser是一个类,在使用时一般继承它然后重载它的方法,来达到解析出需要的数据的目的。
1.常用属性:
lasttag,保存上一个解析的标签名,是字符串。
2.常用方法:
handle_starttag(tag, attrs) ,处理开始标签,比如<div>;这里的attrs获取到的是属性列表,属性以元组的方式展示
handle_endtag(tag) ,处理结束标签,比如</div>
handle_startendtag(tag, attrs) ,处理自己结束的标签,如<img />
handle_data(data) ,处理数据,标签之间的文本
handle_comment(data) ,处理注释,<!-- -->之间的文本
二、基本使用
不多说,上代码
from html.parser import HTMLParserclass MyHTMLParser(HTMLParser):def handle_starttag(self, tag, attrs):"""recognize start tag, like <div>:param tag::param attrs::return:"""print("Encountered a start tag:", tag)def handle_endtag(self, tag):"""recognize end tag, like </div>:param tag::return:"""print("Encountered an end tag :", tag)def handle_data(self, data):"""recognize data, html content string:param data::return:"""print("Encountered some data :", data)def handle_startendtag(self, tag, attrs):"""recognize tag that without endtag, like <img />:param tag::param attrs::return:"""print("Encountered startendtag :", tag)def handle_comment(self,data):""":param data::return:"""print("Encountered comment :", data)parser = MyHTMLParser() parser.feed('<html><head><title>Test</title></head>''<body><h1>Parse me!</h1><img src = "" />''<!-- comment --></body></html>')
以上是根据python手册写的基本使用,解析了一个简单的html。可以运行看看,主要用于了解各个函数负责解析的部分,以及解析顺序。
三、实用案例
以下的实用案例均在上面的代码中修改对应函数,每个实例都是单独的。
解析的html如下:
<html><head><title>Test</title></head><body><h1>Parse me!</h1><img src = "" /><p>A paragraph.</p><p class = "p_font">A paragraph with class.</p><!-- comment --><div><p>A paragraph in div.</p></div></body> </html>
1.获取属性的函数,是个静态函数,新增的。直接定义在类中,返回属性名对应的属性
def _attr(attrlist, attrname):for attr in attrlist:if attr[0] == attrname:return attr[1]return None
2.获取所有p标签的文本,最简单方法只修改handle_data
def handle_data(self, data):if self.lasttag == 'p':print("Encountered p data :", data)
3.获取css样式(class)为p_font的p标签的文本,使用了案例1,增加一个实例属性作为标志,选取需要的标签
def __init__(self):HTMLParser.__init__(self)self.flag = Falsedef handle_starttag(self, tag, attrs):if tag == 'p' and _attr(attrs, 'class') == 'p_font':self.flag = Truedef handle_data(self, data):if self.flag == True:print("Encountered p data :", data)
4.获取p标签的属性列表
def handle_starttag(self, tag, attrs):if tag == 'p':print("Encountered p attrs :", attrs)
5.获取p标签的class属性
def handle_starttag(self, tag, attrs):if tag == 'p' and _attr(attrs, 'class'):print("Encountered p class :", _attr(attrs, 'class'))
6.获取div下的p标签的文本
def __init__(self):HTMLParser.__init__(self)self.in_div = Falsedef handle_starttag(self, tag, attrs):if tag == 'div':self.in_div = Truedef handle_data(self, data):if self.in_div == True and self.lasttag == 'p':print("Encountered p data :", data)
7.处理注释中的标签,若需要的数据在注释中,使用一般函数解析不到
处理方法为,写两个类,继承HTMLParser。在其中一个类的handle_comment里实例化解析类,和其他标签一样解析
这里的MyHTMLParser可以为基本使用中的MyHTMLParser,或者按需重写。
class CommentHTMLParser(HTMLParser):def __init__(self):HTMLParser.__init__(self)def handle_comment(self,data):cparser = MyHTMLParser()cparser.feed(data)
转载于:https://www.cnblogs.com/andingding-blog/p/9125654.html
python自带的用于解析HTML的库HtmlParser相关推荐
- python解析html的库_python自带的用于解析HTML的库HtmlParser
HtmlParser,顾名思义,是解析Html的一个工具.python自带的. 一.常用属性和方法介绍 HtmlParser是一个类,在使用时一般继承它然后重载它的方法,来达到解析出需要的数据的目的. ...
- [python-thirdLib] Python中第三方的用于解析HTML的库:BeautifulSoup
From: http://www.crifan.com/python_third_party_lib_html_parser_beautifulsoup/ 背景 在Python去写爬虫,网页解析等过程 ...
- python自带的sum()函数和numpy库中的sum()函数的区别
在学习<机器学习实战>一书的第十章时,对 return np.sqrt(sum(np.power(vecA - vecB, 2))) 这样一条语句输出的结果老是不对,明明想要输出的是对两个 ...
- 求助,Python安装了Anaconda之后python自带的IDEL无法引用第三方库
求助,Python安装了Anaconda之后python自带的IDEL无法引用第三方库 本来一直是使用idel的,之前安装了一些第三方库现在也可以使用, 但是在安装了anaconda之后,自动安装了很 ...
- python中的argparse包——用于解析命令行参数
python自带的argparse包,常用于解析命令行的参数 使用方法example: import argparse parser = argparse.ArgumentParser() #将arg ...
- python自带网页解析器_python 之网页解析器
一.什么是网页解析器 1.网页解析器名词解释 首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出& ...
- 一图看懂 toml 模块:用于解析和创建TOML(Tom‘s Obvious, Minimal Language)的Python库, 资料整理+笔记(大全)
本文由 大侠(AhcaoZhu)原创,转载请声明. 链接: https://blog.csdn.net/Ahcao2008 @[TOC](一图看懂 toml 模块:用于解析和创建TOML(Tom's ...
- python变量必须以字母和下划线_【转载】关于python中带下划线的变量和函数的意义...
Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...
- 十大被低估的python库_小白必读!十大被低估的Python自带库!
原标题:小白必读!十大被低估的Python自带库! 大家在学习python的过程中,都会了解到python的一个强大的功能在于各种强大的第三方库函数,大家只需要通过pip install 即可安装我们 ...
最新文章
- 图片基础与tf.keras介绍
- 面试题mysql环境搭建_Linux运维必会的100道MySql面试题之(四)
- 100w个整数中,每个数各不相同,且都小于100w,问如何快速的排序
- 数据结构 判断单链表是否有环 C
- 基于深度学习的图像分类Image classification with deep learning常用模型
- 查看MySQL的版本
- 从V1到V4,让你读懂YOLO原理——深度AI科普团队
- Jessica Kerr:高绩效团队简史
- MariaDB安装、卸载以及相关设置(Linux服务器Mysql部署)
- PHP直接输出一张图片
- CentOS7使用yum安装mysql5.7
- ubuntu安装nvidia显卡驱动
- 第3章-数理知识基础 -> 代数图论
- Roblox、Epic Games和Meta,详解三巨头如何引爆元宇宙
- php新年倒计时源码,新年倒计时源码
- python 读取网页源码_python获取整个网页源码的方法
- mysql库函数说明_MySQL 数据库函数库
- 用java写的游戏you_关于用Java写的贪吃蛇游戏的一些感想
- SpeechSynthesisUtterance实现语音播报
- 什么是DNA微阵列技术?
热门文章
- IOS开发之网络编程--文件压缩和解压缩
- 最短路算法floyd
- 每天一道算法题(27)——找出元音字母并排序
- Web_add_cookie的作用
- [vSphere培训实录]8G内存笔记本搭建vSphere测试环境
- Remoting服务集成到IIS的简单总结
- LeetCode4. 寻找两个有序数组的中位数
- python读取数据库后生成网页_python查询数据库并将结果按照格式生成HTML页面展示...
- Ubuntu Linux服务器安装图形化界面并用VNC Viewer连接
- 二级公共基础知识_计算机二级选择题(公共基础知识)