python爬虫-数据解析BeautifulSoup

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.mfbz.cn/a/101104.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

stm32之IIC协议

主要通过两个层面来讲:物理层、协议层。 IIC是一个同步半双工串行总线协议。 一、物理层(通信模型) 1、最早是飞利浦公司开发的这个协议,最早应用到其产品上去。 2、两线制(两根信号线) 其中SCL为时钟…

vue的第2篇 第一个vue程序

一 环境的搭建 1.1常见前端开发ide 1.2 安装vs.code 1.下载地址:Visual Studio Code - Code Editing. Redefined 2.进行安装 1.2.1 vscode的中文插件安装 1.在搜索框输入“chinese” 2.安装完成重启,如下变成中文 1.2.2 修改工作区的颜色 选中[浅色]…

MySQL8.0.22安装过程记录(个人笔记)

1.点击下载MySQL 2.解压到本地磁盘(注意路径中不要有中文) 3.在解压目录创建my.ini文件 文件内容为 [mysql] # 设置mysql客户端默认字符集 default-character-setutf8[mysqld] # 设置端口 port 3306 # 设计mysql的安装路径 basedirE:\01.app\05.Tool…

win10安装Docker Desktop,并修改存储目录

安装之前先看看自己电脑c盘剩余容量,如果小于30G,建议先配置下再安装 因为docker 安装时不提供指定安装路径和数据存储路径的选项,且默认是安装在C盘的。C盘比较小的,等docker运行久了,一大堆的东西放在上面容易导致磁…

视频监控人员行为识别算法

视频监控人员行为识别算法通过opencvpython网络模型框架算法,视频监控人员行为识别算法可以识别和判断员工的行为是否符合规范要求,一旦发现不符合规定的行为,视频监控人员行为识别算法将自动发送告警信息。OpenCV的全称是Open Source Comput…

almaLinux 8 安装 xxdiff 5.1

almaLinux 安装 xxdiff XXdiff——比较和合并工具下载安装安装qt5 XXdiff——比较和合并工具 XXdiff是一款免费、强大的文件和目录比较及合并工具,可以在类似Unix的操作系统上运行,比如Linux、Solaris、HP/UX、IRIX和DEC Tru64。XXdiff的一大局限就是不…

栈和队列篇

目录 一、栈 1.栈的概念及结构 1.1栈的概念 1.2栈的结构示意图 2.栈的实现 2.1支持动态增长的栈的结构 2.2压栈(入栈) 2.3出栈 2.4支持动态增长的栈的代码实现 二、队列 1.队列的概念及结构 1.1队列的概念 1.2队列的结构示意图 2.队列的实…

设计模式-适配器

文章目录 一、简介二、适配器模式基础1. 适配器模式定义与分类2. 适配器模式的作用与优势3.UML图 三、适配器模式实现方式1. 类适配器模式2. 对象适配器模式3.类适配器模式和对象适配器模式对比 四、适配器模式应用场景1. 继承与接口的适配2. 跨平台适配 五、适配器模式与其他设…

滑动窗口和双指针

滑动窗口和双指针 一、循环不变量1.1 定义1.2 总结 二、使用循环不变量写对代码2.1 注意2.2 总结 三、滑动窗口3.1 固定长度的滑动窗口(同向交替移动的两个变量)3.2 不定长度的滑动窗口3.2.1 定义3.2.2 总结 3.3 计数问题3.3.1 标准3.3.2 总结 3.4 使用数…

JavaScript【转】

以下内容转载和参考自:w3school的JavaScript学习内容,HTML JavaScript。 JavaScript 使 HTML 页面更具动态性和交互性,前面我们都是在代码中一开始就将元素的值、属性、style样式写死,使用JavaScript 的话就可以对这些内容动态的更…

ChatGPT癌症治疗“困难重重”,真假混讲难辨真假,准确有待提高

近年来,人工智能在医疗领域的应用逐渐增多,其中自然语言处理模型如ChatGPT在提供医疗建议和信息方面引起了广泛关注。然而,最新的研究表明,尽管ChatGPT在许多领域取得了成功,但它在癌症治疗方案上的准确性仍有待提高。…

简易虚拟培训系统-UI控件的应用1

目录 前言 UI结构总体介绍 建立初步的系统UI结构 Image控件 前言 前面的文章介绍了关于Oculus设备与UI控件的关联,从本文开始采用小示例的方式介绍基本的UI控件在系统中的基本作用(仅介绍“基本作用”,详细的API教程可参考官方文档&#x…

中级深入--day15

案例:使用BeautifuSoup4的爬虫 我们以腾讯社招页面来做演示:搜索 | 腾讯招聘 使用BeautifuSoup4解析器,将招聘网页上的职位名称、职位类别、招聘人数、工作地点、发布时间,以及每个职位详情的点击链接存储出来。 # bs4_tencent.p…

VScode远程连接主机

一、前期准备 1、Windows安装VSCode&#xff1b; 2、在VSCode中安装PHP Debug插件&#xff1b; 3、安装好Docker 4、在容器中安装Xdebug ①写一个展现phpinfo的php文件 <?php phpinfo(); ?>②在浏览器上打开该文件 ③复制所有信息丢到Xdebug: Installation instr…

使用php实现微信登录其实并不难,可以简单地分为三步进行

使用php实现微信登录其实并不难&#xff0c;可以简单地分为三步进行。 第一步&#xff1a;用户同意授权&#xff0c;获取code //微信登录public function wxlogin(){$appid "";$secret "";$str"http://***.***.com/getToken";$redirect_uriu…

【Java核心知识】ThreadLocal相关知识

ThreadLocal 什么是ThreadLocal ThreadLoacal类可以为每个线程保存一份独有的变量&#xff0c;该变量对于每个线程都是独占的。实现原理为每个Thread类中包含一个ThreadHashMap&#xff0c;key为变量的name&#xff0c;value为变量的值。 在日常使用中&#xff0c;我们可以通…

【React学习】—React中的事件绑定(八)

【React学习】—React中的事件绑定&#xff08;八&#xff09; 一、原生JS <body><button id"btn1">按钮1</button><button id"btn2">按钮2</button><button onclick"demo()">按钮3</button><scr…

Git——Windows平台创建gitee私有仓库详解

目录 1. 安装git 2. gitbash配置 2.1 设置 2.2 生成key 2.3 项目管理 2.3.1 本地新建 2.3.2 clone远程仓库的工程到本地改文件 1. 安装git 默认安装。 2. gitbash配置 2.1 设置 打开gitbash&#xff0c;设置用户名和邮箱&#xff1a; git config --global user.name …

浅析Linux系统I/O模型

文章目录 概述阻塞式I/O模型非阻塞式I/O模型I/O多路复用模型信号驱动式I/O模型异步I/O模型相关参考 概述 在操作系统中&#xff0c;I/O类操作是相对慢速的&#xff0c;应用发起一个I/O操作&#xff0c;需要等待I/O资源就绪后&#xff0c;才能继续后面的处理。这种简单的请求-响…

详解MES中的四大现场执行管理模式

导 读 ( 文/ 3426 ) 制造业是全球经济中至关重要的一部分&#xff0c;随着市场竞争的加剧和客户需求的多样化&#xff0c;企业需要寻找合适的生产方式来提高生产效率、降低成本并保证产品质量。在这个背景下&#xff0c;制造执行系统&#xff08;MES&#xff09;作为连接管理层…