在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 相关文章推荐
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
Python聚类算法之DBSACN实例分析
Nov 20 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
python基于ID3思想的决策树
Jan 03 Python
python实现kmp算法的实例代码
Apr 03 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
pandas中ix的使用详细讲解
Mar 09 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
Django配置跨域并开发测试接口
Nov 04 Python
python切割图片的示例
Nov 12 Python
Django框架模板用法详解
Jun 10 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插入排序法实现数组排序实例
2015/02/16 PHP
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
解决vue项目router切换太慢问题
2020/07/19 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
Django基础知识与基本应用入门教程
2018/07/20 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
Python3中列表list合并的四种方法
2019/04/19 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
python实例化对象的具体方法
2020/06/17 Python
Python datetime模块的使用示例
2021/02/02 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
高级护理专业大学生求职信
2013/10/24 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
2014年客房部工作总结
2014/11/22 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android