在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中的字符串类型基本知识学习教程
Feb 04 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
python区块及区块链的开发详解
Jul 03 Python
Python 用matplotlib画以时间日期为x轴的图像
Aug 06 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
在python中做正态性检验示例
Dec 09 Python
Python实现图像去噪方式(中值去噪和均值去噪)
Dec 18 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 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文本数据库的搜索方法
2006/10/09 PHP
PHP学习之整理字符串
2011/04/17 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
使用Python写CUDA程序的方法
2017/03/27 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
python区块及区块链的开发详解
2019/07/03 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
店面销售职位的职责
2014/03/09 职场文书
保护环境倡议书
2014/04/14 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
给医院的感谢信
2015/01/21 职场文书
2016国庆促销广告语
2016/01/28 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python