BeautifulSoup模块基本使用方法(解析—提取数据)

一、了解BeautifulSoup

1、简介

一个灵活又方便的网页解析库,最主要的功能是从网页抓取数据,处理高效,支持多种解析器,
它通过转换器实现文档导航、查找、修改文档的方式。利用它可不用编写正则也能方便的实现网页信息的抓取;

2、安装

pip3 install BeautifulSoup4
BeautifulSoup默认支持Python的标准HTML解析库,但它也支持一些第三方的解析库:如果我们没有安装,则 Python 会使用 Python默认的解析器,不过在实际操作中,
更推荐使用lxm解析器,速度快而且稳定。BeautifulSoup模块可帮助解析html和xml文档中的内容,尤其是在爬取特定网页信息的时候,
用于解析和检查在网上看到的那些乱七八糟而且不规范的HTML页面。

二、BeautifulSoup基本运用

1、创建对象

解析的第一步,是构建一个BeautifulSoup对象,基本用法:此处提示两点:① BeautifulSoup中的B和S需大写,小写会报错;② BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码,
所以当使用requests.get获得HTML文档后用它进行处理时,不需要考虑编码方式。

2、对象的种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,
所有对象可以归纳为4种:Tag
NavigableString
BeautifulSoup
Comment
1)Tag通俗点讲就是HTML中的一个个标签;利用 soup加标签名轻松地获取这些标签的内容;
它查找的是在所有内容中的第一个符合要求的标签;
这些对象的类型是<class 'bs4.element.Tag'>;
Tag对象的两个重要属性:name、attrs;
name:输出标签的标签类型名
attrs:以字典的形式获取标签的属性,既然利用attr获得的是字典对象,那么也是可以修改和删除的2)NavigableString如果拿到标签后,还想获取标签中的内容,则可以通过tag.string获取标签中的文字。作用:获取标签内部的文字;
直译:可遍历的字符串;
使用方法:soup.p.string;
对象类型:<class 'bs4.element.NavigableString'>3)BeautifulSoup它支持遍历文档树和搜索文档树中描述的大部分方法;文档对象,也就是整个文档的内容;
可以当做是一个Tag对象;4)CommentTag,NavigableString,BeautifulSoup几乎覆盖了html和xml中的所有内容,
但是还有一些特殊对象,Comment对象用于操作文档的注释部分。Coment对象是一个特殊类型的NavigableString对象;
如果标签内部的内容是注释,例如:<!-- Elsie -->;那么该NavigableSring对象会转换成Comment对象,
并且会把注释符号去掉。

3、遍历文档树

1)子节点:一个 Tag 可能包含多个字符串或其它的 Tag,这些都是这个 Tag 的子节点。
BeautifulSoup 提供了许多操作和遍历子节点的属性。操作文档树最简单的方法就是告诉它你想获取的 tag 的 name。通过(.)取属性的方式只能获得当前名字的第一个 tag。要得到所有<a>标签,可以用find_all('a')的方法。.contents:获取Tag的所有子节点,返回一个list.children:获取Tag的所有子节点,返回一个生成器;.descendants:获取Tag的所有子孙节点;.strings:如果Tag包含多个字符串,即在子孙节点中有内容,可以用此获取,而后进行遍历;.stripped_strings:与strings用法一致,只不过可以去除掉那些多余的空白内容;2)父节点:.parent:获取Tag的父节点;.parents:递归得到父辈元素的所有节点,返回一个生成器;3)兄弟节点:.previous_sibling:获取当前Tag的上一个节点,属性通常是字符串或空白,
真实结果是当前标签与上一个标签之间的顿号和换行符。.next_sibling:获取当前Tag的下一个节点,属性通常是字符串或空白,
真是结果是当前标签与下一个标签之间的顿号与换行符。.previous_siblings:获取当前Tag的上面所有的兄弟节点,返回一个生成器;.next_siblings:获取当前Tag的下面所有的兄弟节点,返回一个生成器;.previous_element:获取解析过程中上一个被解析的对象(字符串或tag),
可能与previous_sibling相同,但通常是不一样的。4)前进和回退:.next_element:获取解析过程中下一个被解析的对象(字符串或tag),可能与next_sibling相同,
但通常是不一样的。.previous_elements:返回一个生成器,可以向前访问文档的解析内容;.next_elements:返回一个生成器,可以向后访问文档的解析内容;

4、BeautifulSoup的几种遍历方式

1)下行遍历2)上行遍历遍历所有先辈节点,包括soup本身,所以要区分辨别;3)平行遍历平行遍历必须发生在同一个父节点下的各子节点;

5、查找元素之 find find_all

① find返回单个元素,find_all返回所有元素;② 返回的都是列表,每个元素都是一个bs4.element.Tag对象;③ 获取包含的文本值:tag.text;(1)find ( name , attrs , recursive , text , **kwargs )查找一个元素节点,返回第一个满足要求的节点信息;(2)find_all( name , attrs , recursive , text , **kwargs )可根据标签名、属性、内容查找文档,返回所有符合条件的内容;find_parents() find_parent():
find_parents()返回所有祖先节点,find_parent()返回直接父节点;
find_next_siblings() find_next_sibling():
find_next_siblings()返回后面所有兄弟节点,find_next_sibling()返回后面第一个兄弟节点。
find_previous_siblings() find_previous_sibling():
find_previous_siblings()返回前面所有兄弟节点,find_previous_sibling()返回前面第一个兄弟节点。
find_all_next() find_next():
find_all_next()返回节点后所有符合条件的节点,find_next()返回第一个符合条件的节点;
find_all_previous() 和 find_previous():
find_all_previous()返回节点后所有符合条件的节点, find_previous()返回第一个符合条件的节点

三、BeautifulSoup使用css语法查找元素

1)tag.select(css):tag是HTML文档中的一个元素节点;css一般结构:[tagName][attName][=value] 全是可选的,表示元素名称,元素属性,元素属性的值。(2)属性的语法:[attName]:选取带有指定属性的每个元素[attName=value]:选取带有指定属性和值的每个元素[aattName^=value]:匹配属性值以value开头的每个元素[attName$=value]:匹配属性值以value结尾的每个元素[attName*=value]:匹配属性值包含value的每个元素(3)遍历:css有多个节点时,空格分开:soup.select("div p"):查找div节点下所有子孙p节点的信息soup.select("div > p"):查找div节点下所有直接子节点p的信息soup.select("div ~ p"):查找div后面所有同级别兄弟节点p的信息soup.select("div + p"):查找前一个节点后面所有同级别兄弟节点的信息结语:BeautifulSoup是一个非常强大的工具,通过解析文档为用户提供需要抓取的数据,
利用它可以省去很多繁琐的提取工作,提高解析效率。

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

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

相关文章

【Node.js】Express-Generator:快速生成Express应用程序的利器

在Node.js世界中&#xff0c;Express是一个广泛使用的、强大的Web应用程序框架。它为开发者提供了一系列的工具和选项&#xff0c;使得创建高效且可扩展的Web应用程序变得轻而易举。然而&#xff0c;对于初学者来说&#xff0c;配置和初始化Express应用程序可能会有些困难。为了…

【汇编中的寄存器分类与不同寄存器的用途】

汇编中的寄存器分类与不同寄存器的用途 寄存器分类 在计算机体系结构中&#xff0c;8086CPU&#xff0c;寄存器可以分为以下几类&#xff1a; 1. 通用寄存器&#xff1a; 通用寄存器是用于存储数据和执行算术运算的寄存器。在 x86 架构中&#xff0c;这些通用寄存器通常包括…

Redis——数据结构介绍

Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;不过value的类型是多样的&#xff1a; String&#xff1a;hello wordHash&#xff1a;{name:"Jack",age:21}List&#xff1a;[A -> B -> C -> D]Set&#xff1a;{A,B,C}SortedSet…

uni-app 之 图片

uni-app 之 图片 获取图片 v-bind 动态绑定 image.png <template><view><view>--- 获取图片1 ---<image src"../../static/img/tabbar_home1.png"></image></view><view>--- 获取图片2 v-bind 动态绑定---<image v-bi…

面试题查漏补缺 i++和 ++ i哪个效率更高

i 和 i 哪个效率更高&#xff1f; 在这里声明&#xff0c;简单地比较前缀自增运算符和后缀自增运算符的效率是片面的&#xff0c;因为存在很多因素影响这个问题的答案。首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被使用&#xff0c;而是仅仅简单地用于增加一员…

从本地到Gitee:一步步学习文件上传及解决常见报错问题

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;一步步学习文件上传及解决常见报错问题 文章目录 安装git进入gitee官网&#xff0c;登录账号新建仓库先打开git命令行上传本地资源到仓库第一步&#xff1a;git init第二步&#xff1a;git add .第三…

大数据错误

question1 : Could not locate Hadoop executable: D:\hadoop-3.3.1\bin\winutils.exe - 【已解决】Could not locate executable E:\Hadoop\bin\winutils.exe in the Hadoop binaries._could not locate executable e:\hadoop-3.3.1\bin\wi_君问归期魏有期的博客-CSDN博客 q…

Revit SDK 介绍:CreateAirHandler 创建户式风管机

前言 这个例子介绍如何通过 API 创建一个户式风管机族的内容&#xff0c;包含几何和接头。 内容 效果 核心逻辑 必须打开机械设备的族模板创建几何实体来表示风管机创建风机的接头 创建几何实体来表示风管机 例子中创建了多个拉伸&#xff0c;下面仅截取一段代码&#xff…

开发指导—利用 CSS 动画实现 HarmonyOS 动效(二)

注&#xff1a;本文内容分享转载自 HarmonyOS Developer 官网文档 点击查看《开发指导—利用CSS动画实现HarmonyOS动效&#xff08;一&#xff09;》 3. background-position 样式动画 通过改变 background-position 属性&#xff08;第一个值为 X 轴的位置&#xff0c;第二个…

go web之一:hello world快速上手+handle(http.Handle和http.HandleFunc的区别与联系)

前情提要&#xff1a; 需要安装好go的环境和VSCode的go插件。 hello world快速上手 1、创建go.mod 在项目根目录下打开命令行&#xff0c;或者直接用VSCode中的终端。输入命令 go mod init github.com/solenovex/web-tutorial 然后就能看到项目结构中多了一个go.mod 2、…

JavaWeb知识梳理(后端部分)

JavaWeb 静态web资源&#xff08;如html 页面&#xff09;&#xff1a;指web页面中供人们浏览的数据始终是不变。 动态web资源&#xff1a;指web页面中供人们浏览的数据是由程序产生的&#xff0c;不同时间点访问web页面看到的内容各不相同。 静态web资源开发技术&#xff1…

23种设计模式之---单例模式

闲来无事学一下设计模式&#xff0c;希望这23种可以一直更下去&#xff0c;什么时候能更完呢&#xff0c;也许一个月&#xff0c;也许一年&#xff0c;也许断更 设计模式六大原则 本文是23篇的第一篇&#xff0c;在学习设计模式之前&#xff0c;你需要了解下六大原则。 1、开…

2023年特色小镇行业研究报告

第一章 行业概况 1.1 定义 特色小镇&#xff0c;是指以特定产业、文化、旅游、历史等特色为依托&#xff0c;以小镇为载体&#xff0c;通过优化提升小镇的综合功能和服务能力&#xff0c;形成独特的区域品牌和产业集群&#xff0c;进而推动区域经济社会发展的一种新型城镇化形…

ElementUI浅尝辄止24:Message 消息提示

常用于主动操作后的反馈提示。与 Notification 的区别是后者更多用于系统级通知的被动提醒。 1.如何使用&#xff1f; Message 在配置上与 Notification 非常类似&#xff0c;所以部分 options 在此不做详尽解释&#xff0c;可以结合 Notification 的文档理解它们。Element 注…

Docker 部署SpringBoot项目,使用外部配置文件启动项目

一、Springboot项目引入配置文件的方式&#xff1a; 第一种是在jar包的同一目录下建一个config文件夹&#xff0c;然后把配置文件放到这个文件夹下&#xff1b; 第二种是直接把配置文件放到jar包的同级目录&#xff1b; 第三种在classpath下建一个config文件夹&#xff0c;然后…

长连接和短连接有什么区别?

长连接和短连接是什么&#xff1f; HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议&#xff0c;在传输层使用TCP协议&#xff0c;在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题&#xff0c;TCP协议主要解决如何在IP层之上可靠地传递数据包&…

Python实现Word、Excel、PPT批量转为PDF

今天看见了一个有意思的脚本Python批量实现Word、EXCLE、PPT转PDF文件。 因为我平时word用的比较的多&#xff0c;所以深有体会&#xff0c;具体怎么实现的我们就不讨论了&#xff0c;因为这个去学了也没什么提升&#xff0c;不然也不会当作脚本了。这里我将其放入了pyzjr库中…

React 配置别名 @ ( js/ts 项目中通过 webpack.config.js 配置)

一、简介 在 Vue 项目当中&#xff0c;可以使用 来表示 src/&#xff0c;但在 React 项目中&#xff0c;默认却没有该功能&#xff0c;因此需要进行手动的配置来实现该功能。 别名主要解决的问题&#xff1a;每个页面都使用路径的方式进行引入&#xff0c;这样很麻烦&#xff…

机器人中的数值优化(八)——拟牛顿方法(上)

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

在设计web页面时,为移动端设计一套页面,PC端设计一套页面,并且能自动根据设备类型来选择是用移动端的页面还是PC端的页面。

响应式设计&#xff0c;即移动端和PC端共用一个HTML模式&#xff0c;网站的程序和模板自动根据设备类型和屏幕大小进行自适应调整。这种方法我不喜欢&#xff0c;原因是不能很好保证各种客户端的效果&#xff0c;里面存在各种复杂的兼容性等问题。 我喜欢为不同的客户端写不同的…