在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 相关文章推荐
web.py在模板中输出美元符号的方法
Aug 26 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
python使用turtle绘制分形树
Jun 22 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Django中的FBV和CBV用法详解
Sep 15 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
opencv 图像轮廓的实现示例
Jul 08 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 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
基于MySQL体系结构的分析
2013/05/02 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
犀利的js 函数集合
2009/06/11 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
详解 vue.js用法和特性
2017/10/15 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
将python代码和注释分离的方法
2018/04/21 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
解决python中使用PYQT时中文乱码问题
2019/06/17 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
python在协程中增加任务实例操作
2021/02/28 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
西式婚礼证婚词
2014/01/12 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
学校政风行风整改方案
2014/10/25 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js