在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中List.count()方法的使用教程
May 20 Python
Python实现简单字典树的方法
Apr 29 Python
pandas修改DataFrame列名的方法
Apr 08 Python
python3模块smtplib实现发送邮件功能
May 22 Python
Django 路由系统URLconf的使用
Oct 11 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
pip安装python库的方法总结
Aug 02 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
Python中的socket网络模块介绍
Jul 23 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/06/04 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
Smarty模板语法详解
2019/07/20 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
javascript 函数速查表
2010/02/07 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
React Router V4使用指南(精讲)
2018/09/17 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
Tensorflow卷积神经网络实例
2018/05/24 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
大学生活动总结怎么写
2014/04/29 职场文书
服务承诺书怎么写
2014/05/24 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
趣味运动会赞词
2015/07/22 职场文书
导游词之张家界
2019/10/31 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
Python基本的内置数据类型及使用方法
2022/04/13 Python