【python爬虫】—星巴克产品

news/2025/2/23 9:51:22

文章目录

  • 需求
    • 爬取星巴克产品以及图片,星巴克菜单
  • python爬虫
  • 爬取结果

需求

爬取星巴克产品以及图片,星巴克菜单

  • 网页分析: 首先,需要分析星巴克官方网站的结构,了解菜单栏的位置、布局以及菜单项的标签或类名等信息。
  • 发送 HTTP 请求: 使用 Python 的 requests 模块发送 HTTP GET 请求,获取星巴克网页的 HTML 内容。
  • 解析 HTML: 使用一个 HTML 解析库(如 BeautifulSoup)解析网页的 HTML 内容,以便从中提取出菜单栏的数据。
  • 定位菜单栏元素: 使用解析库的选择器功能(如 CSS 选择器或 XPath)定位菜单栏所在的 HTML 元素。
  • 提取菜单数据: 从菜单栏元素中提取菜单项的信息,可能包括菜单项名称、图片等。
  • 数据存储: 将提取的菜单数据存储到适合的数据结构中。

python_11">python爬虫

  • 获取网页源码,这里没有反爬手段,不需要添加其他参数
python">import urllib
from bs4 import BeautifulSoup
import requests

base_url = "https://www.starbucks.com.cn/menu/"
response = urllib.request.urlopen(base_url)
content = response.read().decode('utf-8')

soup = BeautifulSoup(content, 'lxml')
  • 方法一:soup的select方法
python"># 方法一:select方法
import os

# 文件保存路径
save_path = "./practice_071_星巴克/"
if not os.path.exists(save_path): os.makedirs(save_path)

name_list = soup.select('ul[class="grid padded-3 product"]')
# name_list[0].select('li div')[0]["style"]
for name in name_list:
    submenu_pic  = name.select('li div')
    submenu_name = name.select('li strong')
    for pic_url,name in zip(submenu_pic, submenu_name):
        suffix = pic_url["style"].split('("')[-1].split('")')[0]
        # 文件地址 和 名称
        picture_url = 'https://www.starbucks.com.cn' + suffix
        picture_name = name.get_text() + ".jpg"
        
        # 文件不支持名称中含有字符 '/',' '
        picture_name = picture_name.strip().replace("/", 'or')

        # 方法1:urlretrieve
        # urllib.request.urlretrieve(url=picture_url, filename=os.path.join(save_path,picture_name))

        # 方法2:写入文件形式
        src_response = urllib.request.urlopen(picture_url)
        pic_content = src_response.read()

        with open(os.path.join(save_path,picture_name), 'wb') as fp:
            fp.write(pic_content)

        print("{}  完成,地址为  {}".format(picture_name, picture_url))

  • 方法二:soup的find\find_all方法
python"># 方法二:find/find_all方法
menu_list = soup.find('div', class_="wrapper fluid margin page-menu-list").find_all('li')

for name in menu_list:
    suffix = name.find('div')["style"].split('("')[-1].split('")')[0]
    # 文件地址 和 名称
    picture_url = 'https://www.starbucks.com.cn' + suffix
    picture_name = name.find("strong").get_text() + ".jpg"

    # 文件不支持名称中含有字符 '/',' '
    picture_name = picture_name.strip().replace("/", 'or')

    urllib.request.urlretrieve(url=picture_url, filename=os.path.join(save_path,picture_name))

    print("{}  完成,地址为  {}".format(picture_name, picture_url))

爬取结果

在这里插入图片描述


http://www.niftyadmin.cn/n/5039639.html

相关文章

9.17 校招 实习 内推 面经

绿泡*泡: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、自动驾驶一周资讯 - 一汽与Mobileye 签署战略合作,小鹏汽车将用经销商销售逐渐替换直营模式,原小鹏汽车副总裁加盟赛力斯 自动驾驶一周资讯 - 一汽与Mobileye 签署战…

代码大全阅读随笔(七)

循环控制 循环控制会出现什么样的错误,任何一种答案都可以归结到下面所说的问题之一:忽略或者错误的对循环执行初始化,忽略了对累加变量或者其他与循环有关变量执行初始化,不正确的嵌套,不正确的循环终止,忽…

一文搞懂并查集

一文搞懂并查集 1 背景意义2 原理讲解3 路径压缩4 代码模板 1 背景意义 首先要知道并查集可以解决什么问题呢? 并查集常用来解决 连通性 问题。大白话就是当我们需要判断 两个元素 是否在 同一个集合 里的时候,我们就要想到用并查集。 并查集主要有两…

python学习--函数

函数的创建与调用 什么是函数 函数就是执行特定任务或完成特定功能的一段代码为什么需要函数 复用代码 隐藏实现细节 提高可维护性 提高可读性便于调试函数的创建 def 函数名([输入函数]) : 函数体 [return xxx] def calc(a,b): #a,b称为形式参数,简称形参&#x…

自学 Java 需要具备哪些基本条件或技能?

新手初学者在自己学习Java时,需要注意两个方面,一个是学习方面,一个是知识点方面! 学习方面: 1、做学习计划并保持自律 在我们学习Java的过程中,尽量减少干扰,把自己的全部注意力集中在Java上…

第二证券:创业板指失守2000点 算力概念股走势活跃

周三,沪深两市继续缩量震动调整,三大指数均小幅下跌,创业板指失守2000点整数关口,再创调整新低。到收盘,上证综指报3108.57点,跌0.52%;深证成指报10072.46点,跌0.53%;创业…

动手吧,vue单独使用的复选框

单独使用的复选框可以用在两个状态之间的切换&#xff0c;如是否阅读协议、记住账号等场景。 1、template部分 <template><label class"v-checkbox-single"><span class"v-checkbox_input" :class"{ disabled }"><span c…

什么是Vue的自定义指令(custom directives)?如何自定义指令?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Vue.js 的自定义指令⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友…