数据分析系列----beautifulsoup4模块

🌈个人主页:羽晨同学

💫个人格言:"成为自己未来的主人~"

beautifulSoup4是一个用于从HTML或XML文件中提取数据的Python模块。

使用BeautifulSoup模块,你可以提取到需要的任何信息。

BeautifulSoup4是BeautifulSoup系列模块的第四个大版本。

在使用这个模块之前,先要确保我们拿到了网页的源代码,怎么拿到网页的源代码,我们在上一篇文章中有说到,不会的同学可以翻上去看一下。

假设,我们所拿到的源代码是这个:

python 复制代码
html_str = """
<html>
    <head>
        <title>The Dormouse's story</title>
    </head>
    <body>
        <p class="title"><b>The Dormouse's story</b></p>
        <p class="story">Once upon a time there were three little sisters; and their names were
            <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
            <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
            <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
            and they lived at the bottom of a well.
        </p>
        <p class="story">...</p>
"""

我们怎么使用BeautifulSoup这个模块对数据进行解析呢?

首先,我们先导入这个模块。

python 复制代码
from bs4 import BeautifulSoup

这里是BeautifulSoup的语法,

BeautifulSoup(网页源代码,解析器) ----> 使用BeautifulSoup方法针对网页源代码进行文档解析

返回一个BeautifulSoup对象,(本质是树结构),这个解析过程需要解析器。

python 复制代码
soup = BeautifulSoup(html_str,'html.parser')

对文档解析的过程其实就是将html源代码转换成树结构,便于后续的内容查找。

python 复制代码
# print(soup,type(soup)) # <class 'bs4.BeautifulSoup'>

我们接下来学一下怎么提取树结构中的方法和属性。

select:使用CSS选择器(标签选择器,id选择器,class选择器,父子选择器,后代选择器,nth-of-type选择器等),从树结构中遍历符合CSS选择器的所有结果,存放在列表中。

select_one 使用CSS选择器(标签选择器,id选择器,class选择器,父子选择器,后代选择器,nth-of-type选择器等)从树结构中遍历符合CSS选择器的第一个结果,存在列表中。

text:从标签内获取标签内容。

**attrs:**从标签内获取指定属性名对应的属性值。

提取p标签:

标签选择器,只写标签名,会获取整个html源代码中的所有的某标签。

python 复制代码
p_list = soup.select('p')
print(p_list)
python 复制代码
[<p class="title"><b>The Dormouse's story</b></p>, <p class="story">Once upon a time there were three little sisters; and their names were
            <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
            <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
            <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
            and they lived at the bottom of a well.
        </p>, <p class="story">...</p>]

**父子选择器:**从外层向最内容写,使用 > 连接( > 左右一定留一个空格)。

python 复制代码
p_list2 = soup.select('html > body > p')
print(p_list2)
python 复制代码
[<p class="title"><b>The Dormouse's story</b></p>, <p class="story">Once upon a time there were three little sisters; and their names were
            <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
            <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
            <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
            and they lived at the bottom of a well.
        </p>, <p class="story">...</p>]

后代选择器:从外层写向内层,使用空格连接(空格右边的是空格左边的后代)

python 复制代码
p_list3=soup.select('html p')
print(p_list3)
python 复制代码
[<p class="title"><b>The Dormouse's story</b></p>, <p class="story">Once upon a time there were three little sisters; and their names were
            <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
            <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
            <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
            and they lived at the bottom of a well.
        </p>, <p class="story">...</p>]

获取三个拥有sister属性值的a标签。

class选择器,使用,调用标签内的class属性值

python 复制代码
a_list = soup.select('a.sister')
print(a_list)
python 复制代码
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

获取第二个a标签。

id选择器,使用,# 调用标签内的id属性值。

id属性用, # 调用

python 复制代码
a_list2 = soup.select_one('a#link2')
print(a_list2)
a_list2 = soup.select('a#link2')
print(a_list2)
python 复制代码
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>
[<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

获取第二个a的href属性值和标签内容

python 复制代码
a = soup.select_one('html > body a#link2')
print(a,a.text,a.attrs['href'])
python 复制代码
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> Lacie http://example.com/lacie

nth-of-tyoe(N):获取第N个标签

python 复制代码
a = soup.select_one('html > body a:nth-of-type(2)')
print(a,a.text,a.attrs['href'])
python 复制代码
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> Lacie http://example.com/lacie

好了,今天的内容就到这里,我们明天再见。

相关推荐
Setsuna_F_Seiei6 小时前
前端转型 Agent 开发 04 之 MCP 与 Skill(赋予 Agent 更广工作能力)
前端·agent
刘发财7 小时前
前端2秒生成500页矢量PDF,rust真的强到没朋友
前端·javascript·rust
郑州光合科技余经理8 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
梦想平凡8 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
一个有温度的技术博主8 小时前
Linux 核心命令速查指南:从文件操作到系统运维
linux·服务器
yume_sibai9 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
Winner_hwx10 小时前
华为ICT大赛备赛复习1
服务器·网络·华为
宗介波妞11 小时前
Wireshark 抓取 IEC104 报文:常见异常报文排查与标志位解读
服务器·网络·wireshark
计算机魔术师11 小时前
特朗普上台打给黄仁勋:AI末日论是骗局,我们绝不让它发生
前端
troy12811 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析