在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+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
Django 生成登陆验证码代码分享
Dec 12 Python
python+selenium识别验证码并登录的示例代码
Dec 21 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
python pptx复制指定页的ppt教程
Feb 14 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
Python基础之元类详解
Apr 29 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
Python Matplotlib绘制动画的代码详解
May 30 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
Zend的MVC机制使用分析(一)
2013/05/02 PHP
php-fpm配置详解
2014/02/12 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
python tkinter窗口最大化的实现
2019/07/15 Python
python中的逆序遍历实例
2019/12/25 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
12月红领巾广播稿
2014/02/13 职场文书
群教班子对照检查材料
2014/08/26 职场文书
商场收银员岗位职责
2015/04/07 职场文书