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

如果我们要编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓下来,第二步就是解析该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官网发布的会议时间、名称和地点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分别统计出其中英文字母、空格、数字和其它字符的个数 matlab 程序,编写一段程序,要求先输入一行字符,然后分别统计出其中英文...

编写一个求和的程序,要求能任意输入两个整数,求和 用javascript写functionadd(){varAdocument.getElementById("a").value;varBdocument.getElementById("b").value;varA用C语言编写一段程序,输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符…

【ArcGIS遇上Python】长时间序列(30年)每两组栅格数据对应做减法运算求物候参数

Python语言在ArcGIS软件中发挥着乾坤大挪移的作用,然而很多人并不知道它的厉害之处。今天我们利用Python语言来批处理遥感物候数据,获取物候期的参数。 说明: (1)Up_Path:始期数据路径变量 (2)Down_Path:末期数据路径变量 (3)outPath:相减输出结果路径变量 完…

Blazor University (14)渲染树

原文链接:https://blazor-university.com/components/render-trees/渲染树当浏览器呈现内容时,它不仅绘制 HTML 中定义的元素,还必须根据页面大小(元素流)计算绘制它们的位置。例如,以下 Bootstrap HTML 将…

思科加强生成树性能的属性(Portfast /Uplinkfast/BackboneFast)与RSTP的关系

思科加强生成树性能的属性(Portfast/Uplinkfast/BackboneFast)与RSTP的关系本文截自于博主CCNP交换技术稿件内容4.2.6思科加强生成树性能的属性(Portfast/Uplinkfast/BackboneFast)与RSTP的关系首先说明一下,为什么笔者…

数据结构(java语言描述)顺序栈的使用

1.声明Istack接口; package stack;public interface Istack { public void clear(); public boolean isEmpty(); public int length(); public Object peek(); public void push(Object x) throws Exception; public Objec…

sql LEFT JOIN RIGHT JOIN(左连接)(mysql)

我们首先来看我们的两个表: table1: table2: 在这里,LEFT JOIN(内连接,或等值连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。 …

linux shell之xargs 、tr、sha1sum、head、tail一般使用

1 xargs命令 有点类似-exec命令 1)删除当前目录下面的c文件 find . -name "*.c" | xargs rm 2)统计当前c文件里面的代码行数 find . -name "*.c" | xargs wc -l 2 tr命令 替换命令 1)把大小替换成小写 echo &quo…

php的_auto,AutoPHPCheck下载

AutoPHPCheck官方版是一款相当优秀的php开发人员专用PHP验证工具,AutoPHPCheck官方版功能全面,便捷好用,支持执行快速验证来帮助您确保代码的安全性,并且软件还附带了一个基本的语法检查器,可以查找并帮助您处理错误。…

python0表示剪刀_石头,纸,剪刀Python代码。帮助简化

我是Python新手,只写过几个程序。这是我最近为一个“石头剪子”游戏编写的代码。我已经测试过了,效果很好。有什么方法可以简化它吗?谢谢!import randomwins0losses0ties0rounds0r1 #rockp2 #papers3 #scissorsy "The compu…

Google图片加载库Glide的简单封装GlideUtils

Google图片加载库Glide的简单封装GlideUtils

【ArcGIS遇上Python】Python实现点转栅格(PointToRaster)

在ArcGIS中提供了点转栅格(PointToRaster)的工具,如下所示: 参数说明: (1)file:点图层(.shp) (2)data:值字段 (3)outFile:转换后的栅格图层 (4)9660.848118:空间分辨率 python批处理代码: import arcpy arcpy.gp.overwriteOutput=1 arcpy.env.workspace=&…

ASP.NET Core认证授权方案

前言在前面我讲过基于token的权限认证,然后前几天有小伙伴私信我,怎么做一个身份认证也就是授权。在Asp.net Core常见的授权方式有:基于角色的授权,有基于声明的授权,有基于策略的授权, 这三种授权我就不做过多介绍了,…

linux基础知识个人总结

linux基础知识个人总结第一章:1. Linux发展史略,有代表性的Linux发行版:Suse、slackware、ubuntu、RedHat、CentOS2. GNU是Richard Stallman在1983年发起的一项自由软件运动,目标是为了创建一套完全自由的操作系统,它要…

linux shell之pushd、popd、dirs

1 问题 我们有时候需要保存多个路径,上下键切换不方便,用cd-只能到上个目录,我们可以用dirs和pushd和popd 2 dirs、pushd、popd dirs: 这个命令显示栈里面所有的路径,一定会包含当前路径,常用参数如下 dirs -v 显示栈里面的所有…

插入排序—直接插入排序(Straight Insertion Sort)

基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插插入到已入,直至整个序列有序为止。 要点:设…

SQL UNION 和 UNION ALL 操作符(mysql)

首先看两个表: table1: table2: 如果我们要查询table1表和 table2表中的 name1的值,但是不存在重复的值一起输出出来,那么就可以用union操作符: SELECT name1 FROM table1 UNION SELECT name1 FROM table2 结果我们会查…

redis php方案,Redis三种部署方案图文详解

standaloan(单机模式)standaloan 是redis单机模式,及所有服务连接一台redis服务,该模式不适用生产。如果发生宕机,内存爆炸,就可能导致所有连接改redis的服务发生缓存失效引起雪崩。(推荐:redis视频教程)ssentinel(哨兵…

【ArcGIS遇上Python】Python版的ArcGIS栅格计算器模板

python编写的栅格计算器,用于批处理。 import arcpy from arcpy.sa import * arcpy.CheckOutExtension("spatial") arcpy.gp.overwriteOutput1#custom arcpy.env.workspace"G:\\Phenology of 30 Years\\GIMMS 3g\\15Length\\1Length\\" #custo…

抛开flash,自己开发实现C++ RTMP直播流播放器

众所周知,RTMP是以flash为客户端播放器的直播协议,主要应用在B/S形式的场景中。本人研究并用C开发实现了RTMP直播流协议的播放器,结合之前做的RTMP直播采集端,可以将RTMP协议完全扩展到C/S形式的应用场景中,这将对之后…

python用户输入若干个分数_编写一个程序,要求用户输入五个测试分数。与字母grad对应...

Determine_grade-接受单个数字作为参数,并根据以下评分标准显示分数的字母等级:Score 90-100 80-89 70-79 60-69 Below 60Letter Grade ABCDFcalc_average-以分数列表作为参数,显示分数的平均值,以及与该平均值相等的字母分数。ma…