热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3解析html_Python3解析html

python自带了一个类,叫HTMLParser。我们用的时候需要自己定义一个类,继承自HTMLParser。然后重写一部分方法。下面是我们常用的解析h

python 自带了一个类,叫 HTMLParser。

我们用的时候需要自己定义一个类,继承自 HTMLParser 。然后重写一部分方法。

下面是我们常用的解析html的方法,可以看到在 HTMLParser 里面,这些方法内容都是空的,也就是如果我们要用某个方法,我们得自己再我们的类里面重写这个方法。具体的每个方法的使用方式参见下文。

#Overridable -- finish processing of start+end tag:

defhandle_startendtag(self, tag, attrs):

self.handle_starttag(tag, attrs)

self.handle_endtag(tag)#Overridable -- handle start tag

defhandle_starttag(self, tag, attrs):pass

#Overridable -- handle end tag

defhandle_endtag(self, tag):pass

#Overridable -- handle character reference

defhandle_charref(self, name):pass

#Overridable -- handle entity reference

defhandle_entityref(self, name):pass

#Overridable -- handle data

defhandle_data(self, data):pass

#Overridable -- handle comment

defhandle_comment(self, data):pass

#Overridable -- handle declaration

defhandle_decl(self, decl):pass

#Overridable -- handle processing instruction

defhandle_pi(self, data):pass

使用

1. 简单解析

from html.parser importHTMLParserclassMyHTMLParser(HTMLParser):defhandle_starttag(self, tag, attrs):print("Encountered a start tag:", tag)defhandle_endtag(self, tag):print("Encountered an end tag :", tag)defhandle_data(self, data):print("Encountered some data :", data)

parser=MyHTMLParser()

parser.feed('

TestParse me!')

这里写了一个类 MyHTMLParse ,继承自 HTMLParser。然后重写了 handle_xxx方法。

然后只要调用该类的 feed() 方法,将html格式的数据传进去,遇到特定的数据,就会自动触发相应的方法。比如遇到就会触发handle_starttag()方法进行处理。

执行结果如下:

Encountered a start tag: html

Encountered a start tag: head

Encountered a start tag: title

Encountered some data : Test

Encountered an end tag : title

Encountered an end tag : head

Encountered a start tag: body

Encountered a start tag: h1

Encountered some data : Parse me!

Encountered an end tag : h1

Encountered an end tag : body

Encountered an end tag : html

2. 复杂解析

from html.parser importHTMLParserfrom html.entities importname2codepointclassMyHTMLParser(HTMLParser):defhandle_starttag(self, tag, attrs):print("Start tag:", tag)for attr inattrs:print("attr:", attr)defhandle_endtag(self, tag):print("End tag :", tag)defhandle_data(self, data):print("Data :", data)defhandle_comment(self, data):print("Comment :", data)defhandle_entityref(self, name):

c=chr(name2codepoint[name])print("Named ent:", c)defhandle_charref(self, name):if name.startswith('x'):

c= chr(int(name[1:], 16))else:

c=chr(int(name))print("Num ent :", c)defhandle_decl(self, data):print("Decl :", data)

parser= MyHTMLParser()

1)解析文档类型申明

传入html数据如下:

parser.feed('')

执行结果如下,可以看到会自动调用 handle_decl() 方法。

Decl : DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"

2) 解析属性

传入html数据如下:

parser.feed('The Python logo')

执行结果如下,可以看到会自动调用 handle_starttag()方法。

Start tag: img

attr: ('src', 'python-logo.png')

attr: ('alt', 'The Python logo')

3)解析数据以及结束标签

传入html数据如下:

parser.feed('')

执行结果如下,可以看到会自动调用 handle_data() 以及 handle_endtag()方法。

Start tag: style

attr: ('type', 'text/css')

Data :#python { color: green }

End tag : style

4)解析备注

传入html数据如下:

parser.feed('')

执行结果如下,可以看到会自动调用 handle_comment()方法。

Comment : a comment

Comment : [if IE 9]>IE-specific content

5)解析实体字符

传入html数据如下:

parser.feed('>>>')

在html语言中 ‘>’这个符号,实体名称为 > , 实体编号为 >。这里 >表示16进制数字,3E转化过来和62 是一致的。

执行结果如下,可以看到会自动调用 handle_entityref() 来处理 > ,然后调用 handle_charref()来处理 > 以及 >。

Named ent: >Num ent :>Num ent :>



推荐阅读
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本文详细介绍了VMware的多种认证选项,帮助你根据职业需求和个人技能选择最合适的认证路径,涵盖从基础到高级的不同层次认证。 ... [详细]
author-avatar
一个不起眼的小人物
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有