在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制作CSDN免积分下载器
Mar 10 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
对Python Class之间函数的调用关系详解
Jan 23 Python
python检测服务器端口代码实例
Aug 31 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
python如何操作mysql
Aug 17 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 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的FTP学习(一)[转自奥索]
2006/10/09 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
python标准日志模块logging的使用方法
2013/11/01 Python
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
python图像处理之反色实现方法
2015/05/30 Python
python3.5使用tkinter制作记事本
2016/06/20 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
使用python+whoosh实现全文检索
2019/12/09 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Django xadmin安装及使用详解
2020/10/26 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
最新党员思想汇报
2014/01/01 职场文书
超市中秋节促销方案
2014/03/21 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android