转自博客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相关推荐

  1. python解析html的库_python自带的用于解析HTML的库HtmlParser

    HtmlParser,顾名思义,是解析Html的一个工具.python自带的. 一.常用属性和方法介绍 HtmlParser是一个类,在使用时一般继承它然后重载它的方法,来达到解析出需要的数据的目的. ...

  2. [python-thirdLib] Python中第三方的用于解析HTML的库:BeautifulSoup

    From: http://www.crifan.com/python_third_party_lib_html_parser_beautifulsoup/ 背景 在Python去写爬虫,网页解析等过程 ...

  3. python自带的sum()函数和numpy库中的sum()函数的区别

    在学习<机器学习实战>一书的第十章时,对 return np.sqrt(sum(np.power(vecA - vecB, 2))) 这样一条语句输出的结果老是不对,明明想要输出的是对两个 ...

  4. 求助,Python安装了Anaconda之后python自带的IDEL无法引用第三方库

    求助,Python安装了Anaconda之后python自带的IDEL无法引用第三方库 本来一直是使用idel的,之前安装了一些第三方库现在也可以使用, 但是在安装了anaconda之后,自动安装了很 ...

  5. python中的argparse包——用于解析命令行参数

    python自带的argparse包,常用于解析命令行的参数 使用方法example: import argparse parser = argparse.ArgumentParser() #将arg ...

  6. python自带网页解析器_python 之网页解析器

    一.什么是网页解析器 1.网页解析器名词解释 首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出& ...

  7. 一图看懂 toml 模块:用于解析和创建TOML(Tom‘s Obvious, Minimal Language)的Python库, 资料整理+笔记(大全)

    本文由 大侠(AhcaoZhu)原创,转载请声明. 链接: https://blog.csdn.net/Ahcao2008 @[TOC](一图看懂 toml 模块:用于解析和创建TOML(Tom's ...

  8. python变量必须以字母和下划线_【转载】关于python中带下划线的变量和函数的意义...

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  9. 十大被低估的python库_小白必读!十大被低估的Python自带库!

    原标题:小白必读!十大被低估的Python自带库! 大家在学习python的过程中,都会了解到python的一个强大的功能在于各种强大的第三方库函数,大家只需要通过pip install 即可安装我们 ...

最新文章

  1. 图片基础与tf.keras介绍
  2. 面试题mysql环境搭建_Linux运维必会的100道MySql面试题之(四)
  3. 100w个整数中,每个数各不相同,且都小于100w,问如何快速的排序
  4. 数据结构 判断单链表是否有环 C
  5. 基于深度学习的图像分类Image classification with deep learning常用模型
  6. 查看MySQL的版本
  7. 从V1到V4,让你读懂YOLO原理——深度AI科普团队
  8. Jessica Kerr:高绩效团队简史
  9. MariaDB安装、卸载以及相关设置(Linux服务器Mysql部署)
  10. PHP直接输出一张图片
  11. CentOS7使用yum安装mysql5.7
  12. ubuntu安装nvidia显卡驱动
  13. 第3章-数理知识基础 -> 代数图论
  14. Roblox、Epic Games和Meta,详解三巨头如何引爆元宇宙
  15. php新年倒计时源码,新年倒计时源码
  16. python 读取网页源码_python获取整个网页源码的方法
  17. mysql库函数说明_MySQL 数据库函数库
  18. 用java写的游戏you_关于用Java写的贪吃蛇游戏的一些感想
  19. SpeechSynthesisUtterance实现语音播报
  20. 什么是DNA微阵列技术?

热门文章

  1. IOS开发之网络编程--文件压缩和解压缩
  2. 最短路算法floyd
  3. 每天一道算法题(27)——找出元音字母并排序
  4. Web_add_cookie的作用
  5. [vSphere培训实录]8G内存笔记本搭建vSphere测试环境
  6. Remoting服务集成到IIS的简单总结
  7. LeetCode4. 寻找两个有序数组的中位数
  8. python读取数据库后生成网页_python查询数据库并将结果按照格式生成HTML页面展示...
  9. Ubuntu Linux服务器安装图形化界面并用VNC Viewer连接
  10. 二级公共基础知识_计算机二级选择题(公共基础知识)