在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中操作字典之clear()方法的使用
May 21 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
详解python调度框架APScheduler使用
Mar 28 Python
查看Django和flask版本的方法
May 14 Python
python 实现UTC时间加减的方法
Dec 31 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
python算法题 链表反转详解
Jul 02 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
Jul 07 Python
Python创建数字列表的示例
Nov 28 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 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中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
DWR Ext 加载数据
2009/03/22 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
跟老齐学Python之正规地说一句话
2014/09/28 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
python 文件转成16进制数组的实例
2018/07/09 Python
详解Python3 基本数据类型
2019/04/19 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
解决python 找不到module的问题
2020/02/12 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
房产销售独家委托书范本
2014/10/01 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript