在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多线程和队列操作实例
Jun 21 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
Python实现的下载网页源码功能示例
Jun 13 Python
详解python中的Turtle函数库
Nov 19 Python
在python中按照特定顺序访问字典的方法详解
Dec 14 Python
python使用knn实现特征向量分类
Dec 26 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
详解python实现交叉验证法与留出法
Jul 11 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 Python
如何在Python 游戏中模拟引力
Mar 27 Python
Python基础之数据类型知识汇总
May 18 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+DBM的同学录程序(5)
2006/10/09 PHP
用PHP制作的意见反馈表源码
2007/03/11 PHP
php桌面中心(三) 修改数据库
2007/03/11 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
JavaScript触发器详解
2007/03/10 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
市场营销专业个人求职信范文
2013/12/14 职场文书
开工庆典邀请函范文
2014/01/16 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
红高粱观后感
2015/06/10 职场文书
追悼会答谢词范文
2015/09/29 职场文书
python 爬取天气网卫星图片
2021/06/07 Python
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS