位置:首页 > 首页 > 资讯教程 > 美食保健

【Python从入门到进阶】33、使用bs4获取星巴克产品信息,星巴克网站介绍

上一篇我们介绍了BeautifulSoup的基本概念,以及bs4的基本使用,本篇我们来使用bs4来解析星巴克网站,获取其产品信息。

一、星巴克网站介绍

星巴克官网是星巴克公司的官方网站,用于提供关于星巴克咖啡店的信息和服务。在星巴克官网上,可以找到各种有关咖啡、茶饮、糕点和其他食品的详细描述和营养信息。此外,官网还提供星巴克的最新消息、特别活动、促销优惠和公司资讯。

二、产品界面分析

星巴克官网中国地区地址:

我们本次要抓取的是星巴克的产品界面,我们点击首页左上角的“菜单”按钮,在右侧就可以看到星巴克所有的产品:

此时我们按F12打开浏览器的开发者模式,清除NetWork区域,重新点击菜单按钮或刷新菜单界面,可以看到其中获取菜单界面的后台服务地址:

其实就是菜单地址:,它不是一个异步的服务,而是直接返回一个渲染好的html

我们仔细阅读一下获取到的HTML代码,将有关产品的部分单独拉出来,分析其结构(这里选择了“咖啡融合冰淇淋”这一部分的html代码):

 


 
    

 

我们可以看到,整个产品区域是由一个div包裹的,这个div包含一个名为“page-menu-list”的css样式,然后其中的产品全部是由包裹,ul的id为“grid padded-3 product”。其中的具体的产品在里面用标签包裹,而a标签的id包含“menu-product-”的字样,里面的标签包裹的就是我们需要获取的产品名称。而class为“caption”的h3标签,包裹的是该种产品的分类。

综上所述,我们分析出来的结果信息为:

1、所有产品在包含“page-menu-list”的css样式的div下;

2、每种产品大类包裹在id为“grid padded-3 product”的ul下;

3、每种产品大类的名称被包裹在class为“caption”的h3标签内;

4、每种产品具体的名称包裹在包含“menu-product-”的字样的a标签内的标签中。

分析了这些,足以让我们思考如何试用bs4来进行星巴克所有产品的信息抓取了。

三、抓取产品数据

我们需要抓取的结果,就是星巴克产品有多少大类,每个大类下有多少个具体的产品。

1、引入bs4库

编写代码前,首先要确保已经引入了bs4的库(如果没有,需要通过“pip install bs4”来安装)。

然后引入bs4库:

 

from bs4 import BeautifulSoup

 

2、获取星巴克产品页面

我们通过urllib来获取星巴克产品页面的html代码:

 

import urllib.request
# 下面模拟浏览器向服务器发送请求
# 发送HTTP GET请求
response = urllib.request.urlopen('https://www.starbucks.com.cn/menu/')
html_content = response.read().decode()
print(html_content)

 

打印出来就可以看到产品界面的html代码:

3、创建BS对象,并制定解析器

这里使用默认的html.parser解析器,用来解析html代码:

 

# 创建BeautifulSoup对象,并制定解析器(此处使用默认的html.parser)
soup = BeautifulSoup(html_content, 'html.parser')

 

4、获取商品大类

首先我们先获取商品大类,根据上面的分析,我们只需要获取class为“caption”的h3标签内的字符,就获取到所有的大类了:

 

# 1、获取所有的产品大类
captions = soup.find_all('h3', class_="caption")
print("星巴克产品大类:")
for cap in captions:
    print(cap.text)

 

结果:

可以看到星巴克商品的所有大类已经获取到。

5、获取所有产品名称

星巴克冰淇淋咖啡_星巴克奶茶冰淇淋_星巴克冰淇淋加咖啡叫什么

根据第二章的分析,每种产品大类包裹在id为“grid padded-3 product”的ul下,具体的名称包裹在包含“menu-product-”的字样的a标签内的标签中,我们按照这个思路编写bs4代码:

 

# 2、获取所有产品信息
# 获取所有class为grid padded-3 product的ul节点
menus_uls = soup.find_all('ul', class_="grid padded-3 product")
print("【星巴克产品细则】:")
for menus_ul in menus_uls:
    # 获取ul下的所有li节点
    menus_lis = menus_ul.find_all('li')
    # 网页上有空节点,要判定一下才能获取下一步数据
    if len(menus_lis) > 0:
        # 获取ul节点下唯一一个h3的文字,就是产品大类
        print("----[" + menus_ul.h3.text + "]----")
        for menus_li in menus_lis:
            # 获取每一个li里面的a标签内的strong标签的文字,就是具体产品名
            print("    ", menus_li.a.strong.text)

 

结果:

 

【星巴克产品细则】:
----[咖啡融合冰淇淋]----
     阿馥奇朵™
     麦芽雪冷萃™
     冷萃浮乐朵™
     气致™冷萃浮乐朵™
----[星巴克冷萃咖啡系列]----
     冷萃冰咖啡
     轻甜奶油冷萃
     绵云冷萃
----[手工调制浓缩咖啡]----
     美式咖啡(热/冷)
     拿铁(热/冷)
     摩卡(热/冷)
     卡布奇诺(热/冷)
     焦糖玛奇朵(热/冷)
     浓缩咖啡
     馥芮白™
     榛果风味拿铁(热/冷)
     香草风味拿铁(热/冷)
----[星冰乐®]----
     焦糖浓缩咖啡星冰乐
     抹茶星冰乐
     芒果西番莲果茶星冰乐
     摩卡星冰乐
     摩卡可可碎片星冰乐
     香草风味星冰乐
----[气致™冷萃咖啡]----
     气致™冷萃咖啡
----[经典巧克力饮品]----
     经典巧克力饮品(热/冷)
----[茶瓦纳™]----
     红茶拿铁(热/冷)
     抹茶拿铁(热/冷)
     茶瓦纳™ 冰摇柚柚蜂蜜红茶
     冰摇红莓黑加仑茶
     冰摇芒果花草茶
     茶瓦纳™冰摇桃桃乌龙茶
----[深度烘焙]----
     星巴克ORIGAMI™便携式滴滤咖啡(研磨咖啡粉)星巴克®佛罗娜烘焙咖啡系列
----[中度烘焙]----
     星巴克ORIGAMI™便携式滴滤咖啡(研磨咖啡粉)星巴克®派克市场烘焙咖啡系列
----[星巴克VIA® Black]----
     星巴克VIA®哥伦比亚免煮咖啡
     星巴克VIA®意式烘焙免煮咖啡
----[星巴克VIA® Dairy]----
     星巴克VIA®摩卡风味免煮咖啡固体饮料
     星巴克VIA®焦糖拿铁风味免煮咖啡固体饮料
     星巴克VIA®香草拿铁风味免煮咖啡固体饮料
----[深度烘焙]----
     星巴克®佛罗娜咖啡豆
     星巴克®浓缩烘焙咖啡豆
     星巴克®意式烘焙咖啡豆
     星巴克®低因祥龙综合咖啡豆
     星巴克®苏门答腊咖啡豆
----[中度烘焙]----
     星巴克®早餐综合咖啡豆
     星巴克®哥伦比亚咖啡豆
     星巴克®埃塞俄比亚咖啡豆
     星巴克®危地马拉安提瓜咖啡豆
     星巴克®首选咖啡豆
     星巴克®肯亚咖啡豆
     星巴克®派克市场烘焙咖啡豆
     星巴克®凤舞祥云综合咖啡豆
----[烘焙]----
     美式松饼
     蓝莓麦芬
     香浓巧克力麦芬
     旋风玉桂酥
     法式香酥可颂
     法式焦糖酥
     层层榛子果仁酥
     蜂蜜提子司康
     燕麦焦糖布丁面包
     香浓巧克力可颂
     提子干松饼
     核桃提子软法面包
     红豆燕麦松饼
     全麦核桃麦芬
----[蛋糕&甜品]----
     蓝莓曲奇风轻乳酪蛋糕
     经典瑞士卷
     浓醇三重黑巧克力蛋糕
     法式闪电泡芙
     星巴克咖啡提拉米苏蛋糕
     法式马卡龙
     纽约风浓郁重芝士蛋糕
----[其他美食]----
     腰果
     英伦风味黄油饼干
     混合果仁果脯
     水果沙拉
     棒棒糖
     咖啡味蛋卷
     薄荷味口香糖(无糖)
     薄荷味硬糖(无糖)
----[三明治、帕尼尼、卷]----
     牛油果鸡肉焙果
     培根蛋可颂堡
     蜜汁培根蛋卷
     层层牛肉法棍 
     牛肉芝士可颂
     凯撒鸡肉卷
     鸡肉芝香帕尼尼
     炒蛋菌菇虾仁卷
     火腿芝士可颂
     双重芝士火腿吐司
     高达芝士火腿星明治
     帕斯雀牛肉三明治
     烤法式火腿鸡蛋三明治
     慢烤火腿芝士恰巴特
     金枪鱼帕尼尼
     火鸡培根英式麦芬
----[酸奶]----

星巴克奶茶冰淇淋_星巴克冰淇淋加咖啡叫什么_星巴克冰淇淋咖啡

     谷物组合希腊式风味酸奶(混合莓果)      谷物组合希腊式风味酸奶(黄桃) ----[常规产品]----      12oz 烫金品牌黑色马克杯      银色/白色亮面品牌桌面杯      12oz 彰显本色黑色/深灰不锈钢桌面杯      12oz 纯白磨砂玻璃杯      12oz 烫金品牌白色马克杯      16oz 烫金品牌黑色马克杯      16oz 原木黑色拎绳不锈钢保温杯      16oz 彰显本色黑色/深灰不锈钢随行杯      16oz 烫金品牌白色马克杯      3oz 烫金品牌黑色试尝杯      3oz 烫金品牌白色试尝杯      500ml 黑色Logo水瓶      500ml 白色Logo水瓶 ----[臻选产品]----      12oz 纯黑/古铜亮面品牌桌面杯      16oz 香槟金品牌不锈钢桌面杯      500ml 金色Logo水瓶      9oz 臻选玻璃杯

 

可以看到将所有具体产品全部获取,并且按照大类进行了分割。

6、使用lxml获取所有商品名

如果不使用html解析器,使用lxml解析器,那么其代码实现很简单,但是公式编写需要我们进一步思考,代码如下:

 

# 3、使用lxml获取所有产品
soup2 = BeautifulSoup(html_content, 'lxml')
name_list = soup2.select('ul[class="grid padded-3 product"] strong')
print("【星巴克产品细则】:")
for name in name_list:
    print(name.get_text())

 

小伙伴们可以思考一下为什么这么写,并且区别lxml解析器和html解析器在那些场景下哪个比较好用。

以上实验实例的完整代码:

 

# _*_ coding : utf-8
# @Time : 2023-08-27 10:32
# @Author :光仔December
# @File : python获取星巴克产品信息
# @Project :Python基础
from bs4 import BeautifulSoup
import urllib.request
# 下面模拟浏览器向服务器发送请求
# 发送HTTP GET请求
response = urllib.request.urlopen('https://www.starbucks.com.cn/menu/')
html_content = response.read().decode()
# print(html_content)
# 创建BeautifulSoup对象,并制定解析器(此处使用默认的html.parser)
soup = BeautifulSoup(html_content, 'html.parser')
# 1、获取所有的产品大类
captions = soup.find_all('h3', class_="caption")
print("星巴克产品大类:")
for cap in captions:
    print(cap.text)
# 2、获取所有产品信息
# 获取所有class为grid padded-3 product的ul节点
menus_uls = soup.find_all('ul', class_="grid padded-3 product")
print("【星巴克产品细则】:")
for menus_ul in menus_uls:
    # 获取ul下的所有li节点
    menus_lis = menus_ul.find_all('li')
    # 网页上有空节点,要判定一下才能获取下一步数据
    if len(menus_lis) > 0:
        # 获取ul节点下唯一一个h3的文字,就是产品大类
        print("----[" + menus_ul.h3.text + "]----")
        for menus_li in menus_lis:
            # 获取每一个li里面的a标签内的strong标签的文字,就是具体产品名
            print("    ", menus_li.a.strong.text)
# 3、使用lxml获取所有产品
soup2 = BeautifulSoup(html_content, 'lxml')
name_list = soup2.select('ul[class="grid padded-3 product"] strong')
print("【星巴克产品细则】:")
for name in name_list:
    print(name.get_text())

 

以上就是使用bs4对星巴克产品信息进行抓取的实现过程。至此我们对bs4的讲解全部结束,下一篇我们将开始学习selenium技术。

参考:尚硅谷Python爬虫教程小白零基础速通教学视频

免责声明:需要化妆品可以加我微信:shabigui7788.绝对是你买过化妆品最便宜的,有不懂护肤知识也可以找我。

相关文章

全球最大的咖啡连锁店:星巴克公司 Starbucks Corporation(SBUX),星巴克公司简介

星巴克Starbucks Corporation(NASDAQ:SBUX)创立于1971年,总部位于华盛顿州西雅图,全球雇员191,000人,是全球最大的咖啡连锁店

   ⋅    作者:admin | 2024-12-14

【Python从入门到进阶】33、使用bs4获取星巴克产品信息,星巴克网站介绍

文章浏览阅读897次。上一篇我们介绍了BeautifulSoup的基本概念,以及bs4的基本使用,本篇我们来使用bs4来解析星巴克网站,获取其产品信息。_python 爬取星巴克

   ⋅    作者:admin | 2024-12-14

瑞幸跟哈根达斯联名合作,遮羞布下面是垂死挣扎还是?哈根达斯为什么要跟瑞幸合作

瑞幸跟哈根达斯联名合作,遮羞布下面是垂死挣扎还是?,哈根达斯,瑞幸,星巴克,冰淇淋,咖啡,冰激凌

   ⋅    作者:admin | 2024-12-14

叫板星巴克还割韭菜?瑞幸咖啡正能量的其实是它的6家主题店设计!瑞幸咖啡这5家主题店设计,将咖啡与文创、流行文化融合混搭

无论入行初期曾叫板星巴克,还是现在被部分人看作是“割韭菜”,功过参评大家各有各的角度,但是瑞幸咖啡毫无争议、真正正能量的评价,应该是它的5家主题咖啡店空间设计了。

   ⋅    作者:admin | 2024-12-14

星巴克回应出售中国业务?星巴克这是要干嘛?星巴克这是要干什么?

文|江瀚视野最近几年,关于咖啡市场的新闻可谓是不绝于耳,国内的咖啡赛道竞争已经日趋白热化,在这样的情况下,老牌咖啡巨头星巴克考虑出售中国业务的消息传来,引发了市场的热议

   ⋅    作者:admin | 2024-12-14

涨薪留人的星巴克,能对抗中年危机吗?咖啡行业正处于竞争加剧的大环境

即使一线城市的星巴克,普通员工月薪也不过三五千元,而二三线城市的员工月薪则只有两三千。好心的知乎网友提醒道:月薪一万挺难的,年薪百万的更不要来体验生活了。

   ⋅    作者:admin | 2024-12-14

抛弃昂贵的星冰乐,这款神奇捏捏杯,1分钟做出冰沙,星巴克的星冰乐怎么样

寒冷的冬天,大家都想吃热乎乎的火锅。那炎热的大夏天呢?那当然是吃冰沙啦!!!相比雪糕和冰阔落,冰沙口感绵绵又不腻,而且一含就化还能直接喝。最重要的是冰沙耐吃还不

   ⋅    作者:admin | 2024-12-14