目录
find('a',title='xx')和find('a',class_='xx')
温馨提示:看完本篇文章后,可以尝试将爬虫-解析_站长素材-优快云博客中的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标签的所有对象
调整脚本
运行程序,打印的结果
验证
节点信息
示例(课程截图,具体内容以自己代码为准)
!!!!👆打字错误,左右=>作为