当前位置: 首页 > news >正文

【python爬虫】—星巴克产品

文章目录

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

需求

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

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

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方法
# 方法一: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方法
# 方法二: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))

爬取结果

在这里插入图片描述

相关文章:

  • 【C语言】指针经典笔试题(上)
  • [Linux入门]---git命令行的基本使用
  • pytorch生成CAM热力图-单张图像
  • Python实现简单的爬虫功能
  • CListCtrl设置只显示单列
  • RabbitMQ配置文件_修改RabbitMQ MQTT的1883端口
  • OJ练习第180题——颠倒二进制位
  • 我的创作纪念日
  • 多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测(SE注意力机制)
  • 怎么实现一个登录时需要输入验证码的功能
  • 【【萌新的FPGA学习之初识ZYNQ】】
  • 小程序从无到有教学教程-- 01.重置华为云服务器Huawei Cloud EulerOS 2.0版本并且设置安全组
  • MySQL数据库
  • 如何搭建专属的物联网私有云?需要考虑哪些因素?
  • 重新认识架构—不只是软件设计
  • Java JVM分析利器JProfiler 结合IDEA使用详细教程
  • FBX文件结构解读【文本格式】
  • JDK9特性——概述
  • go学习-GMP模型
  • 华为OD:跳房子I
  • 美“群聊泄密门”始作俑者沃尔兹将离职
  • 国际著名学者Charles M. Lieber全职受聘清华深圳国际研究生院
  • 此前显示售罄的火车票“五一”前大量放出来了?12306回应
  • 来上海喝云南咖啡!上海国际咖啡文化节助力咖啡产业破圈出海
  • 青海西宁市城西区副区长于媛媛主动投案,接受审查调查
  • 浙商银行一季度净赚超59亿微增0.61%,非息净收入降逾22%