在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算法学习之基数排序实例
Dec 18 Python
Python解释执行原理分析
Aug 22 Python
在Django的URLconf中使用命名组的方法
Jul 18 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
Python简单操作sqlite3的方法示例
Mar 22 Python
django使用html模板减少代码代码解析
Dec 12 Python
python+pandas生成指定日期和重采样的方法
Apr 11 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
利用OpenCV和Python实现查找图片差异
Dec 19 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
把77A收信机改造成收音机
2021/03/02 无线电
输出控制类
2006/10/09 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
8个必备的PHP功能开发
2015/10/02 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
js实现简单模态框实例
2018/11/16 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python paramiko实现ssh远程访问的方法
2013/12/03 Python
Python写的贪吃蛇游戏例子
2014/06/16 Python
Python实现调度算法代码详解
2017/12/01 Python
利用Python实现kNN算法的代码
2019/08/16 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
教师应聘个人求职信
2013/12/10 职场文书
小学生期末评语大全
2014/04/21 职场文书
车贷收入证明范本
2014/09/14 职场文书