python爬虫-数据解析BeautifulSoup

news2025/1/17 6:17:25

1、基本简介

BeautifulSoup简称bs4,BeautifulSoup和lxml一样是一个html的解析器,主要功能也是解析和提取数据。

BeautifulSoup和lxml类似,既可以解析本地文件也可以响应服务器文件。

缺点:效率没有lxml的效率高 。

优点:接口设计人性化,使用方便。

2、安装

pip install bs4

3、基本语法

一、 节点定位
1. 根据标签名查找节点
        soup.a 【注】只能找到第一个 a
                soup.a.name
                soup.a.attrs
2. 函数
        (1).find(返回一个对象 )
                find('a'):只找到第一个a 标签
                find('a', title='名字')
                find('a', class_='名字')
        (2).find_all(返回一个列表 )
                find_all('a') 查找到所有的a
                find_all(['a', 'span']) 返回所有的a 和 span
                find_all('a', limit=2) 只找前两个a
        (3).select(根据选择器得到节点对象 ) 【推荐】
                1.element
                        eg:p
                2..class
                        eg:.firstname
                3.#id
                        eg:#firstname
                4.属性选择器
                        [attribute]
                                eg:li = soup.select('li[class]')
                        [attribute=value]
                                eg:li = soup.select('li[class="hengheng1"]')
                5.层级选择器
                        element element
                                div p
                        element>element
                                div>p
                        element,element
                                div,p
                                eg:soup = soup.select('a,span')
二、节点信息
(1). 获取节点内容:适用于标签中嵌套标签的结构
        obj.string
        obj.get_text()【推荐】
(2). 节点的属性
        tag.name 获取标签名
                eg:tag = find('li)
        print(tag.name)
                tag.attrs将属性值作为一个字典返回
(3). 获取节点属性
        obj.attrs.get('title')【常用】
        obj.get('title')
        obj['title']

 python代码:

from bs4 import BeautifulSoup
 
# 通过解析本地文件 对bs4基础语法进行熟悉
# 默认打开的编码格式是gbk 所以在打开文件的时候需要指定编码
soup = BeautifulSoup(open('6.html',encoding='utf-8'),'lxml')
 
# 根据标签名查找节点
# 注意找到的是第一个符合条件的信息
print(soup.a)
# attrs 获取标签的属性和属性值
print(soup.a.attrs)
 
# bs4的函数
# (1) find      返回第一个符合条件的数据
print(soup.find('a'))
# 根据title找到对应的标签对象
print(soup.find('a',title="a2"))
# 根据class的值找到对应的标签对象    注意的是class需要添加下划线
print(soup.find('a',class_="a1"))
 
# (2) find_all      返回的是一个列表,并且返回所有的a标签
print(soup.find_all('a'))
# 如果想要获取的是多个标签的数据,那么需要在find_all的参数中添加的是列表的数据
print(soup.find_all(['a','span']))
# limit的作用是查找前几个数据
print(soup.find_all('li',limit=2))
 
# (3) select(推荐)        返回的是一个列表,并且返回多个数据
print(soup.select('a'))
# 可以通过 . 代表class    我们把这种操作叫做类选择器
print(soup.select('.a1'))
# 可以通过 # 代表id
print(soup.select('#l1'))
 
# 属性选择器     通过属性来寻找对应的标签
# 查找到li标签中有id的标签
print(soup.select('li[id]'))
# 查找到li标签中id为l2的标签
print(soup.select('li[id="l2"]'))
 
# 层级选择器
#   后代选择器
# 找到的是div下面的li
print(soup.select('div li'))
 
#   子代选择器
# 某标签的第一级子标签
# 注意:很多的计算机编程语言中不加空格就不会输出内容,但是bs4中不会报错,会显示内容
print(soup.select('div > ul > li'))
# 找到a标签和li标签的所有的对象
print(soup.select('a,li'))
 
 
# 节点信息
#   获取节点内容
obj = soup.select('#d1')[0]
# 如果标签对象中只有内容,那么string和get_text()都可以使用
# 如果标签对象中除了内容还有其他标签 那么string就获取不到数据,get_text()可以获取到数据
# 一般情况下推荐使用get_text()
print(obj.string)
print(obj.get_text())
 
# 节点的属性
obj = soup.select('#p1')[0]
# name是标签的名字
print(obj.name)
# 将属性值作为一个字典返回
print(obj.attrs)
 
# 获取节点的属性
obj = soup.select('#p1')[0]
print(obj.attrs.get('class'))
print(obj.get('class'))
print(obj['class'])

4、案例:星巴克

 需求:爬取星巴克官网中的产品名称。

        网页中找到星巴克的接口

python代码:

import urllib.request
from bs4 import BeautifulSoup
 
url = 'https://www.starbucks.com.cn/menu/'
 
response = urllib.request.urlopen(url)
 
content = response.read().decode('utf-8')
 
soup = BeautifulSoup(content,'lxml')
 
# //ul[@class="grid padded-3 product"]//strong/text()
name_list = soup.select('ul[class="grid padded-3 product"] strong')
 
for name in name_list:
    print(name.get_text())

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vulnhub: Hogwarts: Bellatrix靶机

kali:192.168.111.111 靶机:192.168.111.228 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.228访问80端口 查看源码,提示ikilledsiriusblack.php和文件包含的参数名file 漏洞利用 ikilledsiriusblack.p…

实训笔记9.1

实训笔记9.1 9.1笔记一、项目开发流程一共分为七个阶段1.1 数据产生阶段1.2 数据采集存储阶段1.3 数据清洗预处理阶段1.4 数据统计分析阶段1.5 数据迁移导出阶段1.6 数据可视化阶段 二、项目的数据产生阶段三、项目的数据采集存储阶段四、项目数据清洗预处理的实现4.1 清洗预处…

50ETF期权开户平台(0门槛期权开户指南)

50ETF期权开户平台比较好的有:期权馆,期权科普馆,小熊期权,期权酱,财顺财经,财顺期权等,都是国内前十的期权分仓平台,下文为大家结算50ETF期权开户平台(0门槛期权开户指南…

【SpringSecurity】十一、SpringSecurity集成JWT实现token的方法与校验

文章目录 1、依赖与配置2、JWT工具类3、认证成功处理器4、创建JWT过滤器5、安全配置类 1、依赖与配置 添加JWT的maven依赖&#xff1a; <!-- 添加jwt的依赖 --> <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId…

专业协作设计工具,看看这6个有你喜欢的吗

如今“在线协作”成为了团队设计场景中必需的功能之一&#xff0c;今天本文整理了7个支持团队协作的&#xff0c;好用的设计工具&#xff0c;一起来看看吧&#xff01; 1、即时设计 即时设计是一个强大的在线设计协作工具&#xff0c;它具有实时协作设计和在线评论能力。在设…

干翻Dubbo系列第十四篇:Dubbo协议基于SpringBoot规范化开发

文章目录 文章说明 一&#xff1a;版本控制 二&#xff1a;共有依赖声明于父项目 三&#xff1a;创建共有API 1&#xff1a;定义公共接口 2&#xff1a;定义Bean 四&#xff1a;创建Provider 1&#xff1a;引入公共API 2&#xff1a;创建实现类 3&#xff1a;定义启动…

Mac 如何判断下载Mac with Intel Chip 还是 Mac with Apple Chip

如下图&#xff0c;当我们在 Mac系统 下载客户端时&#xff0c;有两种选择&#xff1a;Mac with Intel Chip 、 Mac with Apple Chip 如何判断要下载哪一种&#xff1f; 需要判断本机Mac是在Inter芯片还是Apple芯片上运行的。方法如下&#xff1a; 点击屏幕左上角Apple标志&a…

DVWA失效的访问控制

失效的访问控制&#xff0c;可以认为是系统对一些功能进行了访问或权限限制&#xff0c;但因为种种原因&#xff0c;限制并没有生效&#xff0c;造成失效的访问控制漏洞,比如越权等 这里以DVWA为例&#xff0c;先访问低难度的命令执行并抓包 删除cookie&#xff0c;并在请求头…

Ei Scopus双检索 | 2024年第二届绿色建筑国际会议(ICoGB 2024)

会议简介 Brief Introduction 2024年第二届绿色建筑国际会议(ICoGB 2024) 会议时间&#xff1a;2024年5月22日-24日 召开地点&#xff1a;意大利米兰 大会官网&#xff1a;www.icogb.org ICoGB 2024将围绕“绿色建筑”的最新研究领域而展开&#xff0c;为研究人员、工程师、专家…

Linux 进程基础概念-进程状态、进程构成、进程控制

Linux 进程 参考&#xff1a; 「linux操作系统」进程的切换与控制到底有啥关系&#xff1f; - 知乎 (zhihu.com)&#xff0c;Linux进程解析_deep_explore的博客-CSDN博客&#xff0c;腾讯面试&#xff1a;进程的那些数据结构 - 知乎 (zhihu.com)&#xff0c;如何在Linux下的进…

百万级并发IM即时消息系统(3)配置数据初始化和前后端交互

04_配置数据初始化及前后端交互_哔哩哔哩_bilibili 1.配置文件 创建一个config文件夹以及一个app.yaml配置文件。 该文件专门存放一些关键配置&#xff0c;如mysql DNS路径和redis的addr账号密码等。 后期可以创建一个工具包和一些初始化方法&#xff0c;专门用来加载这些配…

密码算法、密钥体系---安全行业基础篇1

一、密码算法 密码算法是一种数学和计算方法&#xff0c;用于保护数据的机密性和安全性。不同的密码算法使用不同的数学原理和技术来加密和解密数据。以下是一些常见的密码算法类型&#xff1a; 1. **对称密码算法&#xff1a;** 特点&#xff1a;相同的密钥用于加密和解密数…

14:00面试,14:08就出来了,问的问题有点变态

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

雅思写作 三小时浓缩学习顾家北 笔记总结(三)

目录 顾家北饥饿网100个句子翻译 "Heritage sites threatened by urban development" "Heritage sites are threatened by urban development." We should not ignore face-to-face communication. We cannot ignore face-to-face communication. So…

电商项目part09 分布式事务SeataMQ可靠消息

分布式事务 在微服务架构中&#xff0c;完成某一个业务功能可能需要横跨多个服务&#xff0c;操作多个数据库。这就涉及到到了分布式事务&#xff0c;需要操作的资源位于多个资源服务器上&#xff0c;而应用需要保证对于多个资源服务器的数据操作&#xff0c;要么全部成功&…

数据统计汇总聚合

一些方法 特殊&#xff1a;数据聚合 可加入排序

Leetcode: 1. 两数之和 【题解超详细】

前言 有人夜里挑灯看花&#xff0c;有人相爱&#xff0c;有人夜里开车看海&#xff0c;有人leetcode第一题都做不出来。 希望下面的题解可以帮助你们开始 你们的 leetcode 刷题 的 天降之路 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中…

Linux配置ADSL链接

在Linux中配置ADSL链接&#xff0c;可以按照以下步骤进行&#xff1a; 安装rp-pppoeconf工具&#xff0c;这个工具可以通过终端窗口使用。运行命令“rp-pppoeconf”来配置ADSL链接。终端窗口会显示一个向导模式&#xff0c;用于配置ADSL链接。输入用户名和密码。这些信息是用来…

强强联手 | 大势智慧与山维科技签署战略合作协议

8月30日&#xff0c;武汉大势智慧科技有限公司&#xff08;以下简称“大势智慧”&#xff09;与北京山维科技股份有限公司&#xff08;以下简称“山维科技”&#xff09;达成战略合作。双方将聚焦新型基础测绘建设与实景三维中国领域&#xff0c;携手为广大用户提供数据采集、生…

ShardingJDBC——分库分表实践

摘要 本文主要介绍分表分库&#xff0c;以及SpringBoot集成基于ShardingJDBC的单库分表实践。 一、Sharding-JDBC Sharding-JDBC是ShardingSphere的第一个产品&#xff0c;也是ShardingSphere的前身。 它定位为轻量级Java框架&#xff0c;在Java的JDBC层提供的额外服务。它使…