爬虫-BeautifulSoup的基本使用

目录

BeautifulSoup基本简介

安装bs4

bs4的基本使用

根据标签名查找结点

soup.a

soup.a.name

soup.a.attrs

函数

.find()

find('a')

find('a',title='xx')和find('a',class_='xx')

.find_all()

.select()

element

.class

#id

属性选择器

层级选择器

节点信息


温馨提示:看完本篇文章后,可以尝试将爬虫-解析_站长素材-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标签的所有对象

调整脚本

运行程序,打印的结果

验证

节点信息

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值