如果我们要编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓下来,第二步就是解析该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('' % tag)

def handle_endtag(self, tag):

print('%s>' % tag)

def handle_startendtag(self, tag, attrs):

print('' % 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('

Some html tutorial...
END

')

feed()方法可以多次调用,也就是不一定一次把整个HTML字符串都塞进去,可以一部分一部分塞进去。

特殊字符有两种,一种是英文表示的 ,一种是数字表示的Ӓ,这两种字符都可以通过Parser解析出来。

小结

找一个网页,例如https://www.python.org/events/python-events/,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议时间、名称和地点。

python中html.parser_在Python中使用HTMLParser解析HTML的教程相关推荐

  1. Python分析离散心率信号(中)

    Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...

  2. 使用Python,OpenCV从静态背景中提取移动前景

    使用Python,OpenCV从静态背景中提取移动前景 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍OpenCV中的背景减法方法--即从静态背景中提取移动前景.在许多基于视觉的应用中,背 ...

  3. python廖雪峰_【Python】python中实现多进程与多线程

    进程与线程 进程(process)就是任务,是计算机系统进行资源分配和调度的基本单位[1].比如,打开一个word文件就是启动了一个word进程. 线程(thread)是进程内的子任务.比如word中 ...

  4. OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式...

    OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式 以最简单的4 x 5三通道图像为例,其在内存中Mat类型的数据组织形式如下: 每一行的每一列 ...

  5. python创建列向量_关于Numpy中的行向量和列向量详解

    关于Numpy中的行向量和列向量详解 行向量 方式1 import numpy as np b=np.array([1,2,3]).reshape((1,-1)) print(b,b.shape) 结 ...

  6. python yield理解_对Python中Yield的理解

    看到下面这段程序的时候,有点不明白这个yield到底是个啥东西,看了网上很多的博客,大致理解了yield的含义,所以记录下来. 要说yield首先要说python中的生成器,那么什么是生成器? 假设有 ...

  7. 如何在一场面试中展现你对Python的coding能力?| 技术头条

    点击上方↑↑↑蓝字关注我们~ 作者 | wLsq 来源 | Python数据科学(ID:PyDataScience) 如果你已经通过了招聘人员的电话面试,那么下面正是该展现你代码能力的时候了.无论是练 ...

  8. a_2可以用作python标识符嘛,【单选题】下列选项中,可作为Python标识符的是哪项? A. getpath() B. throw C. my#var D. _ My_price...

    [单选题]下列选项中,可作为Python标识符的是哪项? A. getpath() B. throw C. my#var D. _ My_price 更多相关问题 已知函数f(x)=2x2x-1+21 ...

  9. python如何最适合web开发中的人工智能?

    无论是初创公司还是跨国公司,Python都为每个人提供了一个很好的好处列表.它是最受欢迎和功能强大的高级编程语言,在2018年获得了极大的普及. 它的日益普及使得它能够进入一些最流行和最复杂的过程,如 ...

最新文章

  1. 从源码角度分析 Mybatis 工作原理
  2. 基于数组的无锁队列(译)
  3. HashSet集合和TreeSet集合
  4. gSoap的“error LNK2001: 无法解析的外部符号 _namespaces”解决方法
  5. 循环神经网络RNN的基本组件(五)
  6. python numpy读取数据_python使用numpy读取、保存txt数据的实例
  7. SQL SERVER2000教程-第二章-创建和管理数据库 第六节 压缩数据库
  8. mysql创建独立表空间_InnoDB独立表空间
  9. 详细解释下头条图文和微头条发布建议
  10. 第三天 LINUX安全
  11. MFC——SkinSharp For VS的使用说明
  12. 硬盘安装Win7教程!无光驱无U盘照样装Win7
  13. Linux合入patch命令,Linux下Patch命令用来打补丁和卸载补丁
  14. matlab计数重叠细胞,医学图像处理案例(三)——用分水岭算法分割重叠细胞
  15. 简述一下mysql与sqlyog的安装
  16. PC机装Openwrt19.07做BT下载机的详细配置
  17. vue给列表添加序号_element-UI——el-table添加序号
  18. 研发和测试在多国陆续展开 全球央行数字货币研发驶入快车道
  19. 控制 input 输入框不能输入中文,即不能在输入框中使用输入法
  20. mad离群值_全部关于离群值

热门文章

  1. 一文说通C#的属性Attribute
  2. Goodbye 2020,Welcome 2021 | 沉淀 2021
  3. 开源 一套 Blazor Server 端精致套件
  4. C#黔驴技巧之实现统计结果排名
  5. 深入理解.NET Core的基元(三) - 深入理解runtimeconfig.json
  6. 微软发布 SQL Server 2019 新版本
  7. 使用 C# 和 Blazor 进行全栈开发
  8. 从ASP.NET Core2.2到3.0你可能会遇到这些问题
  9. .net core自定义高性能的Web API服务网关
  10. 聊聊如何设计千万级吞吐量的.Net Core网络通信!