BeautifulSoup基本用法
BeautifulSoup是Python的一个HTML或XML的解析库,可以用它来方便地从网页提取数据(以下为崔庆才的爬虫书的学习笔记)
1|0一. 安装方式
2|0二. 基本语法
2|11. 节点选择器:基本用法
假如想要获取上述html中的title节点及其文本内容,请看以下语法:
引入并初始化beautifulsoup
初始化对于一些不标准的html,可以自动更正格式,如补全标签等等
获取title节点,查看它的类型
获取到的title节点,正是节点加文本内容
获取title节点文本内容
如果想获取其他信息,比如节点的名字及其属性,这些也比较方便
获取title节点的名字
获取p节点的多个属性和某一属性
p节点有多个属性,比如class和name等,可以调用attrs获取所有属性
需要注意的是,有的返回的是字符串,有的返回的是字符串组成的列表。比如,name属性的值是唯一的,返回的结果就是单个字符串,而对于class,一个节点的元素可能有多个class,所以返回的是列表。另外,这里的p节点是第一个p节点
嵌套选择或层级选择
如果多个节点层级嵌套在一起,可以通过层级关系依次选择,比如要选择title节点及其内容,之前我们是soup.title,现在可以这样操作:soup.head.title
2|22. 节点选择器:高级用法
父节点和祖先节点
如果要获取某个节点元素的父节点,可以调用parent属性
这里我们选择的是第一个a节点的父节点元素,很明显,它的父节点是p节点,输出结果便是p节点及其内部的内容
如果想要获取所有的祖先元素,可以调用parents属性:
这里为什么出现了两个html开头的文本呢?是因为parents遍历的顺序是p—body—html—[document]
子节点和子孙节点
选取节点元素知乎,如果想要获取它的直接子节点,可以调用contents属性:
可以看到,返回结果是列表形式。p节点里既包含文本,又包含节点
span节点作为p节点的孙子节点,并没有单独列出,而是包含在a中被列出,说明contents属性得到的结果是直接子节点的列表
同样,我们可以调用children属性得到相应的结果:
如果还想获得所有的子孙节点的话,可以调用descendants属性:
遍历输出可以看到,这次输出的结果就包含了span节点,descendants会递归查询所有子节点,得到所有的子孙节点
兄弟节点
如果想获取兄弟节点,应该怎么办呢?
next_sibling和previous_sibling分别获取节点的下一个和上一个兄弟元素,next_siblings和previous_siblings则分别返回后面和前面的兄弟节点
2|33. 方法选择器
find_all():查询所有符合条件的元素
利用find_all方法查询ul节点,返回结果是列表类型,长度为2,每个元素都是bs4.element.Tag类型
还可以进行嵌套查询,获取li节点的文本内容
除了根据节点名查询,还可以传入一些属性来查询
对于一些常用的属性,比如id和class等,可以不用attrs来传递。比如,要查询id为list-1的节点,可以直接传入id这个参数。还是上面的文本,我们换一种方式来查询:
text参数可以用来匹配节点的文本,传入的形式可以是字符串,可以是正则表达式对象
find():返回单个元素,也就是第一个匹配的元素
其他的查询方法
find_parents()和find_parent():前者返回所有祖先节点,后者返回直接父节点
find_next_siblings()和find_next_sibling():前者返回后面所有的兄弟节点,后者返回后面第一个兄弟节点
find_previous_siblings()和find_previous_sibling():前者返回前面所有的兄弟节点,后者返回前面第一个兄弟节点
find_all_next()和find_next():前者返回节点后所有符合条件的节点,后者返回第一个符合条件的节点
find_all_previous()和find_previous():前者返回节点前所有符合条件的节点,后者返回第一个符合条件的节点
2|43. CSS选择器
使用CSS选择器时,只需要调用select()方法,传入相应的CSS选择器即可
嵌套选择
select()方法同样支持嵌套选择。例如,先选择所有ul节点,再遍历每个ul节点
可以看到,这里正常输出了所有ul节点下所有li节点组成的列表
获取属性
可以看到,直接传入中括号和属性名,或通过attrs属性获取属性值,都可以成功
获取文本
要获取文本,可以用前面所讲的string属性或者get_text()方法
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/11068532.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2018-06-22 解决:pycharm连接github报错 Can't login: Received fatal alert: protocol_version
2017-06-22 《Advanced Bash-scripting Guide》学习(三):自删除脚本和自读取内容的脚本