python的网页解析器_python 之网页解析器

一、什么是网页解析器

1、网页解析器名词解释

首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出“我们需要的有价值的数据”或者“新的URL链接”的工具。

2、网页解析图解

1014259-20170326111057393-1771935228.jpg

二、python 网页解析器

1、常见的python网页

常见的python网页解析工具有:re正则匹配、python自带的html.parser模块、第三方库BeautifulSoup(重点学习)以及lxm库。

2、常见网页解析器分类

以上四种网页解析器,是两种不同类型的解析器:

(1)模糊匹配

re正则表达式即为字符串式的模糊匹配模式;

(2)结构化解析

BeatufiulSoup、html.parser与lxml为“结构化解析”模式,他们都以DOM树结构为标准,进行标签结构信息的提取。()

1014259-20170326112236049-831872032.jpg

(3)结构化解析

我们在了解什么是结构化解析之前,需要先了解下什么是DOM树这个概念。

DOM树解释:即文档对象模型(Document Object Model),其树形标签结构,请见下图。

1014259-20170326114434752-2028623603.jpg

而所谓结构化解析,就是网页解析器它会将下载的整个HTML文档当成一个Doucment对象,然后在利用其上下结构的标签形式,对这个对象进行上下级的标签进行遍历和信息提取操作。

三、BeautifulSoup第三方库

1、beautifulsoup4 简介

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python第三方库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

2、beautifulsoup4 安装

(1)安装方法

我直接启动cmd命令行运行环境,使用pip管理工具进行安装,安装命令如下。

$ pip install beautifulsoup4

(2)安装测试

安装完成后,我直接启动IDLE环境,引入bs4测试其是否安装成功。

>>>> from bs4 import BeautifulSoup

>>>> import bs4

>>>> print bs4

3、BeautifulSoup 语法

BeautifulSoup使用的一般流程就三步走:

(1) 创建BeautifulSoup对象

(2) 使用BeautifulSoup对象的操作方法find_all 与 find进行解读搜索。

如:

>>>> soup.find_all('a')

>>>> soup.find(‘a’)

(3) 利用DOM结构标签特性,进行更为详细的节点信息提取。

1014259-20170326122558065-919988375.jpg

1014259-20170326122607658-2032225424.jpg

4、使用方法(学习重点)

(1)第一步:创建BeautifulSoup对象(即DOM对象)

# 引入BeautifulSoup库>>>> frombs4 import BeatifulSoup

# 根据HTML网页字符串结构创建BeatifulSoup对象。>>>> soup =BeautifulSoup(html_doc, #HTML文档字符串'html.parser', #HTML解析器

from_encoding= 'utf-8'#HTML文档编码

)

(2)第二步:搜索节点(find_all,find)

搜索节点方法:

soup.find_all() ---查找所有符合查询条件的标签节点,并返回一个列表。

soup.find()--- 查找符合符合查询条件的第一个标签节点。

实例1:搜索所有标签

>>>> soup.find_all('a')

实例2:查找所有标签符合标签名为a,链接符合 /view/123.html的节点

1)实现方法1:

>>>> soup.find_all('a', href = '/view/123.html')

2)实现方法2:

>>>> soup.find_all('a', href = re.compile(r'/view/\d+\.html'))

实例3:查找所有标签为名为a,class属性为abc,文字为python的节点

>>>> soup.findall('a', class_= 'abc', string = 'python')

(3)第三步:访问节点信息

比如我们得到节点: I love Python

1) 获取节点名称

>>>> node.name

2)获取查找到的a节点的href属性

>>>> node['href']

或者>>>> node.get('href')

3)获取查找到的a节点的字符串内容

>>>> node.get_text()

5、BeautifulSoup 信息提取实例

html_doc = """

The Dormouse's story

The Dormouse's story

Once upon a time there were three little sisters; and their names wereElsie,LacieandTillie;

and they lived at the bottom of a well.

...

"""# 获取所有a标签节点内容

links= BeautifulSoup('a')

#查找已经获取a标签节点中所有连接for link inlinks:

pirnt(link.name,link['href'],link.get_text())

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

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

相关文章

写一个聊天辅助程序

Codeprocedure TForm1.Button1Click(Sender: TObject);varhParent,hButton,hMemo: HWND;beginMemo1.SelectAll;//Memo内容全选Memo1.CopyToClipboard;//把Memo中选中的语句拷贝到剪贴板中try//找发送消息的QQ窗口hParent : FindWindow(nil, 发送消息);//然后找回话时用的编辑窗…

真是个狠人!开学第一天,这批小学生的造型刷爆朋友圈!

全世界只有3.14 % 的人关注了爆炸吧知识在史上最长的长假过后杭州一二三年级小学生回到学校忘记座位在哪里、老师姓什么各种有趣故事不断……而在养正小学门口,从入校门开始,大家笑声就不断,别样的开学礼一下刷屏了朋友圈:每个小朋…

C++中如何读取一个数的位数_C语言编写程序求水仙花数

C语言编写程序求水仙花数水仙花数是一个数学问题,其实质是一个三位数,个位数的立方加十位数的立方加百位数的立方之和等于这个三位数本身。例如153=1*1*15*5*53*3*3,即153=112527。这是一个相对较为简单的C程序&#x…

RabbitMQ简介和六种工作模式详解

一、RabbitMQ简介是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang(高并发语言)语言来编写的,并且RabbitMQ是基于AMQP协议的。1.1 AMQP协议Advanced Message Queuing Protocol(高级消息…

为什么男性比女性死得更早,心疼一秒钟!

最近娱乐圈的那些大瓜大家都吃了吗?某明星的运动?黑眼圈??不免让小编想起之前看的文章 男性为啥比女性“去”的早嗯,有可能是操劳过度 生活太累 咳咳咳咳咳以上均是不负责任猜想吃瓜要谨慎呦????不过这篇报道…

(转)C#网络编程(基本概念和操作) - Part.1

源码下载:http://www.tracefact.net/SourceCode/Network-Part1-2.rar C#网络编程(基本概念和操作) - Part.1 引言 C#网络编程系列文章计划简单地讲述网络编程方面的基础知识,由于本人在这方面功力有限,所以只能提供一些初步的入门知识&#x…

jwt如何防止token被窃取_在吗?认识一下JWT(JSON Web Token)?

什么是JSON Web Token ?官网介绍:JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的,因此可以被验证和信任。可…

8月日更,我的困难与感悟

8月份参加了掘金的日更活动,坚持每天写技术文章进行分享,现在活动结束了,来复盘下这一个月来我的困难与感悟。8月日更其实刚开始我是不想参加这个活动的,最近确实比较忙,不管是工作还是自己的私事,都不允许…

那些神一样的学习技巧,专治各种不服!

▲ 点击查看著名的俄国生理学家曾反复对自己的学生提过这个要求:“应当先学会观察,观察。不学会观察,你就永远当不了科学家。”鲁迅也曾这样教导:“如果要创作,第一要观察。”在《神探夏洛克》中,有这么一段…

kafka 怎么样连接图形化界面_图形化编程有多简单,点亮LED不到一分钟

Arduino编程在所有单片机当中应该说是最简单的了,但是还可以更加简单。比如说图形化编程,图形化编程真正让Arduino大众化了,因为谁都可以通过图形化编程方式来制作自己需要的小玩意。啃萝卜关于图形化编程软件有很多,我独宠啃萝卜…

linux驱动内核哪个文件夹,linux设备驱动归纳总结(一):内核的相关基础概念...

linux设备驱动归纳总结(一):内核的相关基础概念1. 内核与 linux 设备驱动的作用与关系内核:用于管理软硬件资源,并提供运行环境。如分配 4G 虚拟空间等。linux 设备驱动:是连接硬件和内核之间的桥梁。linux 系统按个人理解可按下划…

怪不得超市不让带宠物...

1 难怪超市不让带狗啊▼2 医学生的聊天记录过于硬核▼3 你身边的外卖小哥头盔上都顶着什么呢?▼4 表妹非要把猫脸P到蜜蜂身上▼5 其实主要还是看脸脸到位了,祖安小公举问题都不大▼6 就你们这个送别方式我觉得他是回不来了......▼7 妹妹沦为工具…

自定义控件复选框和单选框的实现

我们先实现单个按钮,为了复用,不管单选还是复选按钮都是使用同一个类来实现,为了区别单选还是复选,我们用一个自定义枚举类型CheckButtonStyle属性style来区别,当其值设置为CheckButtonStyleDefault或CheckButtonStyle…

单文件组件的组件传值_移动端组件化架构(下)

我的组件化方案对于项目架构来说,一定要建立于业务之上来设计架构。不同的项目业务不同,组件化方案的设计也会不同,应该设计最适合公司业务的架构。架构设计以我之前公司项目为例,项目是一个地图导航应用,业务层之下的…

为什么圆是360度?超颠覆的解释

圆为什么有360度?为什么不是300度呢?古文明时期人类把很多不能解释的自然现象归结为“天意”真的有天意吗?我们把圆分成等份,奇迹出现了.....依次等分下去,结果一样...任何被分成等分的角度的所有数字之和为9现在我们来…

我获得“微软MVP”奖项,后续将会贡献更多技术内容

昨天晚上,我收到了微软总部发来的“恭喜获得MVP”的邮件。请点击【阅读原文】查看我的MVP Profile页面。有的朋友说“一直以为你早就是MVP了”。其实这么多年我做的技术贡献主要是录编程视频教程,而这些视频教程都是通过BT下载等方式传播,没有…

[Spring MVC] - InitBinder验证

Spring MVC使用InitBinder验证: 使用InitBinder做验证的情况一般会在此Controller中提交的数据需要有一些是业务性质的,也即比较复杂的验证情况下才会使用。大部份简单的表单验证,使用annotation验证即可以解决。 Annotation验证使用方法可参…

linux6.5进入救援模式,rhel6.5救援模式修复系统

如果系统中很多重要的部分被删除了例如/boot下的所有东西,则可以通过救援模式[rootdazzle1 桌面]# mkdir /backup[rootdazzle1 桌面]# cp /etc/fstab /backup/fstab  //先备份以下fstab文件,也可以不备份自己写[rootdazzle1 桌面]# rm -rf /boot/*  …

一名毕业生的自述:我知道我必须写论文,但没聪明到可以写出来......

全世界只有3.14 % 的人关注了爆炸吧知识2020年转眼就到了4月。在即将毕业的学子之间,每天的狂野问候语是这样的:“你论文改完了吗?”“你论文查重率是多少?”“你什么时候答辩?”在微博上实时搜索“翟天临”三个字&…

不是架构的架构之四:业务层的实现与自动代理

我们在开篇中提到,希望能有一种办法,能自动适应系统的环境配置,在局域网小型应用中将直接访问数据库以获得最高的性能,在分布式环境中自动使用WCF来获得较好的安全性和连通性。 但是,我们不希望这样的特性使我们的开发…