Python 抓取好利来甜品信息并下载封面图片

文章概述

本文将介绍如何使用 Python 抓取好利来甜品的商品信息,并将这些信息保存到 CSV 文件中,同时还会下载每款甜品的封面图片到指定文件夹。我们将使用 requests 库来进行 HTTP 请求,使用 csv 库来写入 CSV 文件,并使用 os 库来处理文件和目录。

准备工作

在开始之前,请确保安装了以下 Python 库:

  • requests:用于发送 HTTP 请求。
  • csv:用于处理 CSV 文件。
  • os:用于文件和目录操作。

可以通过 pip 安装所需的库:

pip install requests
代码实现
import csv
import json
import os
import requests

# 初始化全局变量
list_url_id = []
id = 1  # 商品ID
type_id = 1  # 甜品类型ID

# 创建封面的目录
# 使用 os.makedirs 而不是 os.mkdir 来避免错误
try:
    os.makedirs('好利来封面', exist_ok=True)
except Exception as e:
    print(f"目录创建失败: {e}")

# 标题头
list_mulu = ['id', '商品名', '甜品价格', '甜品口味', '甜品规格', '保质期', '储蓄方式', '甜品类型id']

# 写入 CSV 文件
with open('好利友.csv', 'w', encoding="gb18030", newline="") as fp:
    csv_writer = csv.writer(fp)
    csv_writer.writerow(list_mulu)

# 定义请求头部
headers = {
    'Server': 'nginx/1.21.4',
    'Date': 'Fri, 09 Jun 2023 03:39:16 GMT',
    'Content-Type': 'text/html',
    'Last-Modified': 'Sat, 03 Jun 2023 08:10:37 GMT',
    'Transfer-Encoding': 'chunked',
    'Connection': 'keep-alive',
    'Vary': 'Accept-Encoding',
    'ETag': 'W/"647af57d-179d"',
    'via': '29f5b82c2e13',
    'Content-Encoding': 'gzip'
}

# 定义获取商品列表的函数
def List_url(i):
    data = {'platform': "pc", 'ver': "20211210", 'type_id': f"{i}", 'data_count': 0, 'word': ""}
    data2 = {'platform': "pc", 'ver': "20211210", 'type_id': f"{i}", 'data_count': 30, 'word': "", 'isNextPage': 'true'}
    
    reps = requests.post('https://api-mini-holiland.1900m.com/PcMallGoods/getGoodsList', data=data)
    reps.encoding = 'utf-8'
    pdaw = json.loads(reps.text)
    
    reps2 = requests.post('https://api-mini-holiland.1900m.com/PcMallGoods/getGoodsList', data=data2)
    reps2.encoding = 'utf-8'
    pdaw2 = json.loads(reps2.text)
    
    list_pdaw = pdaw['data']['list'] + pdaw2['data']['list']
    return list_pdaw

# 定义解析和下载数据的函数
def Analysis_and_download(list_pdaw):
    global id
    global type_id
    
    for pda in list_pdaw:
        if pda['goods_id'] in list_url_id:
            continue
        list_url_id.append(pda['goods_id'])
        
        data2 = {
            'consignee_adcode': 411302001000,
            'goods_id': pda['goods_id'],
            'outlets_id': '3',
            'platform': "pc",
            'ver': "20211210"
        }
        
        reps2 = requests.post('https://api-mini-holiland.1900m.com/MallGoods/detail', data=data2)
        json_reps = json.loads(reps2.text)['data']
        
        name = json_reps['name']
        url_cover = json_reps['cover_url']
        How_to_save = json_reps['storage_mode'] or '暂无'
        Expiration_date = json_reps['expiration_date'] or '暂无'
        flavor_name = json_reps['sku'][0]['flavor_name']
        Price = json_reps['sku'][0]['specification_list'][0]['price']
        Proposal = json_reps['sku'][0]['specification_list'][0].get('proposal', '')
        daxiao = json_reps['sku'][0]['specification_list'][0]['specification_name']
        guige = f'{daxiao}({Proposal})' or '暂无'
        
        # 下载封面
        with open(f'好利来封面/{id}.jpg', 'wb') as fp:
            fp.write(requests.get(url_cover).content)
        
        # 写入 CSV 文件
        with open('好利友.csv', 'a', encoding="gb18030", newline="") as fp:
            csv_writer = csv.writer(fp)
            csv_writer.writerow([id, name, Price, flavor_name, guige, Expiration_date, How_to_save, type_id])
        
        id += 1
        print(f"{name} 数据存储完成!")
    
    type_id += 1

# 主程序
for i in range(3, 13):
    Analysis_and_download(List_url(i))

print("所有数据抓取完成!")
注意事项
  1. API 访问限制:请检查 API 的访问频率限制,以免被封禁。
  2. 编码问题:本例中使用了 GB18030 编码以支持中文字符。
  3. 异常处理:代码中已加入了一些基本的异常处理,但在实际部署时可能还需要更多的健壮性测试。
结论

通过上述代码,我们可以轻松地抓取好利来甜品的相关信息,并将数据保存到 CSV 文件中,同时将封面图片下载到指定文件夹。这为后续的数据分析提供了便利。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值