在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 StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
Python面向对象类继承和组合实例分析
May 28 Python
使用python实现mqtt的发布和订阅
May 05 Python
python实现批量修改服务器密码的方法
Aug 13 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
Python调用Windows命令打印文件
Feb 07 Python
numpy库reshape用法详解
Apr 19 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
python使用BeautifulSoup 解析HTML
Apr 24 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如何透过ODBC来存取数据库
2006/10/09 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
python复制与引用用法分析
2015/04/08 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
pycharm显示远程图片的实现
2019/11/04 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
python如何运行js语句
2020/09/09 Python
离婚协议书范本及离婚须知
2014/10/15 职场文书
婚前协议书范本两则
2014/10/16 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
自荐信格式模板
2015/03/27 职场文书
python如何进行基准测试
2021/04/26 Python