在Python中使用HTMLParser解析HTML的教程


Posted in Python onApril 29, 2015

如果我们要编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓下来,第二步就是解析该HTML页面,看看里面的内容到底是新闻、图片还是视频。

假设第一步已经完成了,第二步应该如何解析HTML呢?

HTML本质上是XML的子集,但是HTML的语法没有XML那么严格,所以不能用标准的DOM或SAX来解析HTML。

好在Python提供了HTMLParser来非常方便地解析HTML,只需简单几行代码:

from HTMLParser import HTMLParser
from htmlentitydefs import name2codepoint

class MyHTMLParser(HTMLParser):

  def handle_starttag(self, tag, attrs):
    print('<%s>' % tag)

  def handle_endtag(self, tag):
    print('</%s>' % tag)

  def handle_startendtag(self, tag, attrs):
    print('<%s/>' % tag)

  def handle_data(self, data):
    print('data')

  def handle_comment(self, data):
    print('<!-- -->')

  def handle_entityref(self, name):
    print('&%s;' % name)

  def handle_charref(self, name):
    print('&#%s;' % name)

parser = MyHTMLParser()
parser.feed('<html><head></head><body><p>Some <a href=\"#\">html</a> tutorial...<br>END</p></body></html>')

feed()方法可以多次调用,也就是不一定一次把整个HTML字符串都塞进去,可以一部分一部分塞进去。

特殊字符有两种,一种是英文表示的 ,一种是数字表示的Ӓ,这两种字符都可以通过Parser解析出来。
小结

找一个网页,例如https://www.python.org/events/python-events/,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议时间、名称和地点。

Python 相关文章推荐
Python抓取Discuz!用户名脚本代码
Dec 30 Python
python使用tensorflow深度学习识别验证码
Apr 03 Python
解决使用PyCharm时无法启动控制台的问题
Jan 19 Python
python实现合并两个排序的链表
Mar 03 Python
django 信号调度机制详解
Jul 19 Python
django序列化serializers过程解析
Dec 14 Python
python变量的作用域是什么
May 26 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
django 获取字段最大值,最新的记录操作
Aug 09 Python
Python如何使用ElementTree解析xml
Oct 12 Python
Python更改pip镜像源的方法示例
Dec 01 Python
Python 图片处理库exifread详解
Feb 25 Python
python安装以及IDE的配置教程
Apr 29 #Python
python获取从命令行输入数字的方法
Apr 29 #Python
在Python中处理XML的教程
Apr 29 #Python
python搜索指定目录的方法
Apr 29 #Python
python中sleep函数用法实例分析
Apr 29 #Python
介绍Python中内置的itertools模块
Apr 29 #Python
python使用fileinput模块实现逐行读取文件的方法
Apr 29 #Python
You might like
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
详细介绍Python函数中的默认参数
2015/03/30 Python
python实现中文转换url编码的方法
2016/06/14 Python
独特的python循环语句
2016/11/20 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Python中的探索性数据分析(功能式)
2017/12/22 Python
python版微信跳一跳游戏辅助
2018/01/11 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
python3.6编写的单元测试示例
2019/08/17 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
Python 解析简单的XML数据
2020/07/24 Python
python计算auc的方法
2020/09/09 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
自动化系在校本科生求职信
2013/10/23 职场文书
收银员岗位职责
2014/02/07 职场文书
保护动物倡议书
2014/04/15 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
事业单位个人总结
2015/02/12 职场文书
百万英镑观后感
2015/06/09 职场文书
单位车辆管理制度
2015/08/05 职场文书
总结高并发下Nginx性能如何优化
2021/11/01 Servers
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers