在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获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
使用简单工厂模式来进行Python的设计模式编程
Mar 01 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
opencv与numpy的图像基本操作
Mar 08 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
Python类反射机制使用实例解析
Dec 30 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
python判断链表是否有环的实例代码
Jan 31 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
Python常用扩展插件使用教程解析
Nov 02 Python
python编写五子棋游戏
May 25 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小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
js中作用域的实例解析
2017/03/16 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
Python3搜索及替换文件中文本的方法
2015/05/22 Python
用Python实现KNN分类算法
2017/12/22 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
护士检查书
2014/01/17 职场文书
班主任新年寄语
2014/04/04 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
win10清理dns缓存
2022/04/19 数码科技