爬虫-BeautifulSoup的基本使用
目录
find('a',title='xx')和find('a',class_='xx')
温馨提示:看完本篇文章后,可以尝试将爬虫-解析_站长素材-CSDN博客中的xpath解析改成使用bs4解析来检验学习成果。即将xpath表达式换成bs4表达式。参考答案我会放在评论区
BeautifulSoup基本简介

安装bs4

pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple
bs4的基本使用
这里通过解析本地文件,来讲解bs4的语法
首先准备本地html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
<a>进入百度</a>
</ul>
<a>进入谷歌</a>
</body>
</html>
然后使用bs4解析本地文件

from bs4 import BeautifulSoup
# 默认打开的文件的编码格式是gbk,所以在打开文件时需要指定编码
soup = BeautifulSoup(open('bs4的基本使用.html',encoding='utf-8'),'lxml')
'lxml':指定lxml作为解析器来解析 HTML。lxml是一个快速且功能强大的 HTML 和 XML 解析库。soup:最终返回的BeautifulSoup对象,这个对象包含了解析后的 HTML 文档结构,之后可以通过它来操作和提取文档中的数据。
接下来会基于上面的代码讲解bs4语法
根据标签名查找结点

soup.a
它用于获取第一个a标签
在脚本中添加如下代码

运行程序,得到打印结果

查看html文件,发现得到的结果是第一个a

soup.a.name
获取第一个
<a>标签的标签名
调整脚本

运行程序,打印结果

soup.a.attrs
它用于获取第一个a标签的属性和属性值
调整html文件,给第一个a标签添加一些属性

调整脚本代码

运行程序,得到打印结果

函数

.find()
调整html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
<a href="http://baidu.com" id="1" class="a1">进入百度</a>
</ul>
<a title="a2">进入谷歌</a>
</body>
</html>
find('a')
find('a')用于查找第一个a标签。
调整脚本

运行程序,打印结果

验证

find('a',title='xx')和find('a',class_='xx')
- find('a',title='xx')用于查找第一个title属性值为xx的a标签
- find('a',class_='xx')用于查找第一个clss属性值为xx的a标签,之所以class要加上’_‘,是因为class已经是ba4的关键字了,需要防止与class关键字冲突
调整脚本

运行程序,打印的结果

验证

.find_all()

像前面一样自己试试吧
.select()
根据选择器得到节点对象,它返回的是一个列表。
element
通过标签来获取数据。
调整脚本

运行程序,打印的结果

可以看到,得到了所有的a标签,并以列表的形式返回
.class
可以通过.(点)代表class,.(点)后面跟上class的属性值xx,这样就可以查找到class属性为xx的所有a标签了,这种操作称为类选择器
调整脚本

运行程序,打印的结果

验证

#id
可以通过#代表id,#后面跟上id的属性值xx,这样就可以查找到id属性为xx的所有a标签了
跟前面讲到的.class类似,自己试试吧,这里就不赘述了。
属性选择器
通过属性来寻找对应的标签
获取拥有id属性的所有li标签
调整html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li id="l1">张三</li>
<li id="l2">李四</li>
<li>王五</li>
<a href="http://baidu.com" id="1" class="a1">进入百度</a>
</ul>
<a title="a2">进入谷歌</a>
</body>
</html>
调整脚本

运行程序,打印的结果

验证

获取拥有id属性值为l2的li标签
调整脚本

运行程序,打印的结果

验证

层级选择器

调整html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<ul>
<li id="l1">张三</li>
<li id="l2">李四</li>
<li>王五</li>
<a href="http://baidu.com" id="1" class="a1">进入百度</a>
</ul>
</div>
<a title="a2">进入谷歌</a>
</body>
</html>
后代选择器(空格)
现在要查找div下的li
调整脚本

运行程序,打印的结果

验证

子代选择器
现在要查找div下的li
调整脚本

运行程序,打印的结果

验证

在很多的计算机编程语言中,如果不加空格不会输出内容,但是在bs4中,不会报错,能正常显示内容。所有这里div>ul>li,加不加空格都可以,但如果是在其他编程语言中使用子代选择器,需要加空格。
组合选择
找到a标签和li标签的所有对象
调整脚本

运行程序,打印的结果

验证

节点信息

示例(课程截图,具体内容以自己代码为准)


!!!!👆打字错误,左右=>作为

更多推荐
所有评论(0)