用Python批量获取唯品会商品数据(附视频教程)

677 篇文章 324 订阅
13 篇文章 5 订阅

情人节快到了,还不知道给女朋友买什么礼物?
直男:别问,问就是口红
在这里插入图片描述
好吧,那我们今天就来爬一下口红,看看什么色号最受欢迎!
在这里插入图片描述
很多兄弟都是苦于没有对应的资料,不清楚方向要学什么,或者有问题半天解决不了就很烦不想学了,这都是小问题,资料都给大家准备好了,有学习问题也可以在这里问,互相交流点我加群
Python环境、pycharm编辑器/永久激活/翻译插件
python零基础视频教程
Python界面开发实战教程
Python爬虫实战教程
Python数据分析实战教程
python游戏开发实战教程
Python 电子书100本
学习路线规划
统统免费领取
Python相关问题可解答
Python相关外包需求可发布
Python相关招聘需求可发布
等等等等

好吧都可以加群,然后我们开始今天的内容叭。

流程
1、动态数据抓包演示
2、json数据解析
3、requests模块的使用
4、保存csv

要用到的环境和模块

python 3.6
pycharm
requests >>> pip install requests
csv

爬虫基本思路

开始之前先给不会爬虫的兄弟大概了解一下爬虫的基本思路。

一. 数据来源分析
确定一下需求
1. 通过开发者工具进行抓包分析
前50个商品 为一组 url地址 有什么不一样
中50个商品 为一组
后20个商品 为一组
(切片)
只要获取到所有的商品ID 即可获取所有的商品信息
先获取商品ID 再把商品ID 分段传入请求 再获取商品数据 最后再保存

二. 代码实现过程

1. 发送请求 
2. 获取数据 
3. 解析数据(提取商品ID)
4. 把商品ID分段传入 发送请求
5. 解析数据(提取商品信息)
6. 保存数据
7. 多页爬取

requests要自己安装一下

import requests  # 发送请求 数据请求 pip install requests
import pprint  # 格式化输出模块
import csv  # 内置模块
import time

写入表头

f = open('口红数据.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题', '品牌', '原价', '折扣', '售价', '基本信息', '详情页'])
csv_writer.writeheader() 

发送请求 获取数据 解析数据

headers = {
    'referer': 'https://category.vip.com/',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.3',
}


def get_shop_info(pid):
    index_url = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2'
    params_1 = {
        'app_name': 'shop_pc',
        'app_version': '4.0',
        'warehouse': 'VIP_HZ',
        'fdc_area_id': '104103101',
        'client': 'pc',
        'mobile_platform': '1',
        'province_id': '104103',
        'api_key': '70f71280d5d547b2a7bb370a529aeea1',
        'user_id': '',
        'mars_cid': '1618053045038_6c9f5ed5dbad3934f24d94f695bd47c8',
        'wap_consumer': 'a',
        'productIds': pid,
        'scene': 'search',
        'standby_id': 'nature',
        'extParams': '{"stdSizeVids":"","preheatTipsVer":"3","couponVer":"v2","exclusivePrice":"1","iconSpec":"2x","ic2label":1}',
        'context': '',
        '_': '1627993112200',
    }
    response_1 = requests.get(url=index_url, params=params_1, headers=headers)
    json_data = response_1.json()['data']['products']
    for index in json_data:
        try:
            title = index['title']
            name = index['brandShowName']
            market_price = index['price']['marketPrice']
            sale = index['price']['saleDiscount']
            sale_price = index['price']['salePrice']
            shop_info = '|'.join([j['name'] + ':' + j['value'] for j in index['attrs']])
            # https://detail.vip.com/detail-1711236176-6918710001647165520.html
            href = 'https://detail.vip.com/detail-' + index['brandId'] + '-' + index['productId'] + '.html'
            # [色系: 豆沙色调]
            dit = {
                '标题': title,
                '品牌': name,
                '原价': market_price,
                '折扣': sale,
                '售价': sale_price,
                '基本信息': shop_info,
                '详情页': href,
            }
            csv_writer.writerow(dit)
            print(title, name, market_price, sale, sale_price, shop_info, href)
        except:
            pass

部分代码

for page in range(0, 1081, 120):
    time.sleep(1)
    # 发送请求网址  我们要去浏览的一个网址
    url = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/search/product/rank'
    params = {
        # 'callback': 'getMerchandiseIds',
        'app_name': 'shop_pc',
        'app_version': '4.0',
        'warehouse': 'VIP_HZ',
        'fdc_area_id': '104103101',
        'client': 'pc',
        'mobile_platform': '1',
        'province_id': '104103',
        'api_key': '70f71280d5d547b2a7bb370a529aeea1',
        'mars_cid': '1618053045038_6c9f5ed5dbad3934f24d94f695bd47c8',
        'wap_consumer': 'a',
        'standby_id': 'nature',
        'keyword': '口红',
        'sort': '0',
        'pageOffset': page,
        'channelId': '1',
        'gPlatform': 'PC',
        'batchSize': '120',
        '_': '1627993112197',
    }
    # 请求头作用是什么?  把python伪装成浏览器发送请求
    # referer: 防盗链 告诉服务器 我们请求的网址来自于哪里 跳转
    # user-agen: 浏览器的基本信息
    # 发送请求
    response = requests.get(url=url, params=params, headers=headers)
    # response.text 获取文本数据
    # response.json() 获取json字典数据
    # response.content 获取二进制数据
    # pprint.pprint(response.json())
    # 解析数据 json数据直接解析 通过键值对取值 通过冒号左边的内容 提取冒号右边的内容
    # 遍历提取 列表推导式
    products = response.json()['data']['products']
    pid_list = [i['pid'] for i in products]  # 列表推导式

    # pid_list = []
    # for i in products:
    #     pid = i['pid']
    #     pid_list.append(pid)
    # 切片 列表 把列表转成字符串数据
    # print(pid_1)
    # print(type(pid_1))
    # print(len(pid_1))
    # 前50个商品 为一组
    # 中50个商品 为一组
    # 后20个商品 为一组
    pid_1 = ','.join(pid_list[0:50])  # 0-49
    pid_2 = ','.join(pid_list[50:100])  # 50-99
    pid_3 = ','.join(pid_list[100:])  # 100 到最后所有的

    get_shop_info(pid_1)
    get_shop_info(pid_2)
    get_shop_info(pid_3)

好了,大家可以自己试试,有啥问题或者需要跟这个相关的视频教程点我获取

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您编写一个爬取唯品会商品信息的 Python 程序。这里需要使用到 requests 和 BeautifulSoup 库,您需要提前安装这两个库,可以通过以下命令进行安装: ``` pip install requests beautifulsoup4 ``` 接下来,您可以使用以下代码来实现您的需求: ```python import requests from bs4 import BeautifulSoup def get_vip_products(keyword): # 构造请求 URL url = f"https://category.vip.com/suggest.php?keyword={keyword}" # 发送 GET 请求 response = requests.get(url) # 解析 JSON 数据 data = response.json() # 提取关键字对应的商品 ID product_id = data["data"]["products"][0]["id"] # 构造请求 URL url = f"https://detail.vip.com/detail-{product_id}-0-1.html" # 发送 GET 请求 response = requests.get(url) # 解析 HTML 页面 soup = BeautifulSoup(response.text, "html.parser") # 提取商品标题 title = soup.find("div", {"class": "goods-info"}).find("h1").text.strip() # 提取商品价格 price = soup.find("div", {"class": "goods-price"}).find("span", {"class": "price"}).text.strip() # 提取商品链接 link = url # 提取店铺名称 seller = soup.find("div", {"class": "goods-info"}).find("div", {"class": "store-info"}).find("span").text.strip() # 将商品信息添加到列表中 products = [{ "title": title, "price": price, "link": link, "seller": seller, }] return products ``` 这个函数接受一个关键字作为参数,返回一个包含多个商品信息的列表。您可以通过调用这个函数来实现您的需求,例如: ```python products = get_vip_products("iphone") print(products) ``` 这将输出一个包含一个 iPhone 商品信息的列表,每个商品信息包含标题、价格、链接和店铺名称。注意,由于唯品会的页面结构与其他电商网站有所不同,这里的实现可能不太通用,您需要根据实际情况进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值