python爬取唯品会商品信息

2023-11-13

目录

1.明确需求和抓包思路

2.发送请求,获取数据

3.解析数据

4.保存数据

5.最终效果


1.明确需求和抓包思路

目标: 爬取唯品会中泳衣的商品信息

思路:点击F12打开抓包工具 --> 刷新页面 --> 搜索关键字找到我们想要的数据包,并分析

2.发送请求,获取数据

请求链接:获得商品ID数据

当url为长连接时,我们可以分段写:

​问号前面 -> 请求链接 ​  

问号后面 -> 请求参数、查询参数(在开发者工具network-payload查找)

import requests
# 构造伪请求头
headers = {
     "Referer": "https://category.vip.com/",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 请求链接
url = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2?'
# 请求参数
data = {
    "app_name": "shop_pc",
    "app_version":"4.0",
    "warehouse": "VIP_HZ",
    'fdc_area_id': "104103105",
    "client": "pc",
    'mobile_platform': "1",
    "province_id": "104103",
    "api_key": "70f71280d5d547b2a7bb370a529aeea1",
    "user_id": "",
    "mars_cid": "1689329487922_7feadb1a833bb7d1380e40f6e7572fff",
    "wap_consumer": "a",
    "productIds": "6920269641265660623,6919269290708597831,6918915874224063836,6919798151514506573,2736390477346888,2891474976578247,6919798151514518861,6919675341290738836,6919259179854452052,6920250903815424655,2766703467616269,2169994865,6920279689597107167,6919960987713959836,6920382449658235796,2876504189630669,2910440252357662,2736390477355080,2895685386241758,2765190986319752,6920447656244110279,2804371112156959,6920442282866906503,6919827210032574940,6920194289836579348,6918576590623773716,6919768033477487444,6919938807569897364,2765190986295176,6919827210015789532,2876504189626573,6919764953763153552,6919165075042048660,6920431008557578196,6920342169219109916,6919930400923369948,2902922323390983,6920121891363422797,6919798151531308365,6920416110144640532,6920315893087596252,6920147527227647124,2884110521883335,6920434934424803860,6919772356565115220,6920071029232646484,6919945966029039508,6919675341324334228,6920230370920125213,2924666982808199",
    "scene": "search",
    "standby_id": "nature",
    "context": "",
    "_": "1689389675519",
}
# 发送HTTP请求
requeston = requests.get(url=url, params=data, headers=headers)
# 获得响应的数据
print(requeston.json())

3.解析数据

requeston.json()表示将返回的响应数据解析为JSON格式,

requeston.json()['data']['products']表示从JSON数据中获取名为"data"的键对应的值,然后再获取该值中的名为"products"的键对应的值。

接下来通过列表推导式[i['productId'] for i in ...]遍历上述取得的"products"值中的每个元素,将每个元素中的"productId"键对应的值提取出来,并存储在新的products列表中。

# 获得商品Id
# 方法1:for循环
# products = []
# for i in requests.json()['data']['products']:
#     # print(i['productId'])
#     products.append(i['productId'])
# 方法2:列表推导式
products = [i['productId'] for i in requeston.json()['data']['products']]
print(len(products))

将商品id进行分组。在进行大规模数据获取时,可能会遇到网络异常、请求超时等问题。如果一次性请求所有数据,可能会对错误处理和重试造成困难。而将商品ID分组后,可以针对每个分组进行错误处理和重试,提高数据获取的可靠性。

# 商品ID分组 --> 切片
# 列表合并成字符串
product_id_1 = ",".join(products[:50])
product_id_2 = ",".join(products[50:100])
product_id_3 = ",".join(products[100:])
product_id_list = [product_id_1, product_id_2, product_id_3]

通过for循环获得每个商品的详细信息

for product_id in product_id_list:
    # 请求链接
    link = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2?app_name=shop_pc&app_version=4.0&warehouse=VIP_HZ&fdc_area_id=104103105&client=pc&mobile_platform=1&province_id=104103&api_key=70f71280d5d547b2a7bb370a529aeea1&user_id=&mars_cid=1689329487922_7feadb1a833bb7d1380e40f6e7572fff&wap_consumer=a&productIds=6919798151514506573%2C6920269641265660623%2C6919798151514518861%2C6919269290708597831%2C6918915874224063836%2C2736390477346888%2C2891474976578247%2C2876504189630669%2C6919675341290738836%2C6919960987713959836%2C2169994865%2C2766703467616269%2C6920382449658235796%2C2910440252357662%2C2902922323390983%2C2765190986319752%2C6919827210032574940%2C6919259179854452052%2C2876504189634765%2C6920250903815424655%2C2804371112156959%2C2736390477355080%2C6920342169219109916%2C6920279689597107167%2C2895685386241758%2C6920447656244110279%2C6920194289836579348%2C6920442282866906503%2C6919827210015789532%2C6919768033477487444%2C2765190986295176%2C6919165075042048660%2C6919764953763153552%2C6920315893087596252%2C6920416110144640532%2C6918576590623773716%2C6919938807569897364%2C6919930400923369948%2C6920366918282336732%2C2882749161196231%2C2891329926023245%2C6918163184803156827%2C6919221354186146452%2C2924666982808199%2C6920147527227647124%2C6920121891363422797%2C6920431008557578196%2C6919798151531308365%2C6919945966029039508%2C2917169264452045%2C&scene=search&standby_id=nature&extParams=%7B%22stdSizeVids%22%3A%22%22%2C%22preheatTipsVer%22%3A%223%22%2C%22couponVer%22%3A%22v2%22%2C%22exclusivePrice%22%3A%221%22%2C%22iconSpec%22%3A%222x%22%2C%22ic2label%22%3A1%2C%22superHot%22%3A1%2C%22bigBrand%22%3A%221%22%7D&context=&_=1689412122582'
    # 发送请求
    json_data = requests.get(url=link, headers=headers)
    a = json_data.json()

4.保存数据

导入csv模块,将数据写入csv文件中。

import csv
   
fieldnames = ['标题', '品牌', '原价', '售价', '折扣', '商品信息', '详情页链接']
    with open('data.csv', 'a', newline='', encoding='utf-8-sig') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        writer.writeheader()  # 写入表头
        for index in a['data']['products']:
            attr = ','.join([j['value'] for j in index['attrs']])
            row = {
                '标题': index['title'],
                '品牌': index['brandShowName'],
                '原价': index['price']['marketPrice'],
                '售价': index['price']['salePrice'],
                '折扣': index['price']['mixPriceLabel'],
                '商品信息': attr,
                '详情页链接': f'https://detail.vip.com/detail-{index["brandId"]}-{index["productId"]}.html'
            }
            writer.writerow(row)

5.最终效果

import requests
import csv
# 模拟浏览器请求
headers = {
    # 防盗链 告诉服务器请求链接地址从哪里跳转过来
     "Referer": "https://category.vip.com/",
    # 用户代理 浏览器基本身份信息
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 请求链接
url = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2?'
# 请求参数
data = {
    #"callback": "getMerchandiseDroplets1",  # 回调函数 获取requests.json()错误,将其省略
    "app_name": "shop_pc",
    "app_version":"4.0",
    "warehouse": "VIP_HZ",
    'fdc_area_id': "104103105",
    "client": "pc",
    'mobile_platform': "1",
    "province_id": "104103",
    "api_key": "70f71280d5d547b2a7bb370a529aeea1",
    "user_id": "",
    "mars_cid": "1689329487922_7feadb1a833bb7d1380e40f6e7572fff",
    "wap_consumer": "a",
    "productIds": "6920269641265660623,6919269290708597831,6918915874224063836,6919798151514506573,2736390477346888,2891474976578247,6919798151514518861,6919675341290738836,6919259179854452052,6920250903815424655,2766703467616269,2169994865,6920279689597107167,6919960987713959836,6920382449658235796,2876504189630669,2910440252357662,2736390477355080,2895685386241758,2765190986319752,6920447656244110279,2804371112156959,6920442282866906503,6919827210032574940,6920194289836579348,6918576590623773716,6919768033477487444,6919938807569897364,2765190986295176,6919827210015789532,2876504189626573,6919764953763153552,6919165075042048660,6920431008557578196,6920342169219109916,6919930400923369948,2902922323390983,6920121891363422797,6919798151531308365,6920416110144640532,6920315893087596252,6920147527227647124,2884110521883335,6920434934424803860,6919772356565115220,6920071029232646484,6919945966029039508,6919675341324334228,6920230370920125213,2924666982808199",
    "scene": "search",
    "standby_id": "nature",
    "context": "",
    "_": "1689389675519",
}

# 发送请求
requeston = requests.get(url=url, params=data, headers=headers)
# 获得商品Id
products = [i['productId'] for i in requeston.json()['data']['products']]
print(len(products))

# 商品ID分组 --> 切片
# 列表合并成字符串
product_id_1 = ",".join(products[:50])
product_id_2 = ",".join(products[50:100])
product_id_3 = ",".join(products[100:])
product_id_list = [product_id_1, product_id_2, product_id_3]

for product_id in product_id_list:
    # 请求链接
    link = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2?app_name=shop_pc&app_version=4.0&warehouse=VIP_HZ&fdc_area_id=104103105&client=pc&mobile_platform=1&province_id=104103&api_key=70f71280d5d547b2a7bb370a529aeea1&user_id=&mars_cid=1689329487922_7feadb1a833bb7d1380e40f6e7572fff&wap_consumer=a&productIds=6919798151514506573%2C6920269641265660623%2C6919798151514518861%2C6919269290708597831%2C6918915874224063836%2C2736390477346888%2C2891474976578247%2C2876504189630669%2C6919675341290738836%2C6919960987713959836%2C2169994865%2C2766703467616269%2C6920382449658235796%2C2910440252357662%2C2902922323390983%2C2765190986319752%2C6919827210032574940%2C6919259179854452052%2C2876504189634765%2C6920250903815424655%2C2804371112156959%2C2736390477355080%2C6920342169219109916%2C6920279689597107167%2C2895685386241758%2C6920447656244110279%2C6920194289836579348%2C6920442282866906503%2C6919827210015789532%2C6919768033477487444%2C2765190986295176%2C6919165075042048660%2C6919764953763153552%2C6920315893087596252%2C6920416110144640532%2C6918576590623773716%2C6919938807569897364%2C6919930400923369948%2C6920366918282336732%2C2882749161196231%2C2891329926023245%2C6918163184803156827%2C6919221354186146452%2C2924666982808199%2C6920147527227647124%2C6920121891363422797%2C6920431008557578196%2C6919798151531308365%2C6919945966029039508%2C2917169264452045%2C&scene=search&standby_id=nature&extParams=%7B%22stdSizeVids%22%3A%22%22%2C%22preheatTipsVer%22%3A%223%22%2C%22couponVer%22%3A%22v2%22%2C%22exclusivePrice%22%3A%221%22%2C%22iconSpec%22%3A%222x%22%2C%22ic2label%22%3A1%2C%22superHot%22%3A1%2C%22bigBrand%22%3A%221%22%7D&context=&_=1689412122582'
    # 发送请求
    json_data = requests.get(url=link, headers=headers)
    a = json_data.json()
    print(len(a))
    fieldnames = ['标题', '品牌', '原价', '售价', '折扣', '商品信息', '详情页链接']
    with open('data.csv', 'a', newline='', encoding='utf-8-sig') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        writer.writeheader()  # 写入表头
        for index in a['data']['products']:
            attr = ','.join([j['value'] for j in index['attrs']])
            row = {
                '标题': index['title'],
                '品牌': index['brandShowName'],
                '原价': index['price']['marketPrice'],
                '售价': index['price']['salePrice'],
                '折扣': index['price']['mixPriceLabel'],
                '商品信息': attr,
                '详情页链接': f'https://detail.vip.com/detail-{index["brandId"]}-{index["productId"]}.html'
            }
            writer.writerow(row)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取唯品会商品信息 的相关文章

  • 将 ical 附件的邮件消息的内容类型设置为“text/calendar; method=REQUEST”

    我正在尝试使用 App Engine 邮件 API 从 App Engine 发送 iCalendar 格式的 ics 文件 这在 GMail 中非常有效 但是 Outlook 无法识别该文件 我认为问题在于内容类型设置为 文本 日历 而不
  • 在二维数组中进行所有可能的组合

    我正在尝试制作具有所有可能组合的 4x4 16 像素黑白图像数组 我制作了以下数组作为模板 template 0 0 0 0 start with all white pixels 0 0 0 0 0 0 0 0 0 0 0 0 然后我想迭
  • 如何打印前面有一定数量空格的整数?

    C has printf Xd Y 它只打印整数 X 并使其在控制台窗口上占据 Y 空格 例如 printf 3d 10 console 10 printf 5d 5 console 5 我如何在 python 3 中使用它 This pr
  • 有什么好的适用于 Google App Engine 应用程序的 AJAX 框架吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的 Google App Engine 应用程序中实现 AJAX 因此我正在寻找一个好的
  • 是否可以在 IPython 控制台中显示 pandas 样式?

    是否可以显示熊猫风格 https pandas pydata org pandas docs stable user guide style html在 iPython 控制台中 Jupyter 笔记本中的以下代码 import panda
  • 创建 xyz 海拔数据的曲面图

    我正在尝试用 python 创建一座山的表面图 其中我有一些 xyz 数据 最终结果应该类似于that https i stack imgur com rKQV0 png 该文件的格式如下 616000 0 90500 0 3096 712
  • 在Python中将大文件(25k条目)加载到dict中很慢?

    我有一个大约有 25000 行的文件 它是 s19 格式的文件 每行就像 S214780010 00802000000010000000000A508CC78C 像这样的事情怎么样 我做了一个测试文件 只有一行S21478001000802
  • pandas 数据框的最大大小

    我正在尝试使用读取一个有点大的数据集pandas read csv or read stata功能 但我不断遇到Memory Errors 数据帧的最大大小是多少 我的理解是 只要数据适合内存 数据帧就应该没问题 这对我来说不应该是问题 还
  • 无法使用Python请求会话模块登录网站

    我刚刚开始进行网络抓取 对于我的第一个项目 我尝试使用 requests Session 登录 artofproblemsolving com 并访问另一个用户的帐户 这是我的代码 import requests LOGIN URL htt
  • Python 中“is”运算符的语义是什么?

    如何is运算符确定两个对象是否相同 它是如何工作的 我找不到它的记录 来自文档 http docs python org reference datamodel html 每个对象都有一个身份 一个类型 和一个值 对象的身份 一旦发生就永远
  • 使用 python 从 CSV 创建字典

    我有一个 CSV 格式的文件 其中 A B 和 C 是标题 我如何以Python方式将此CSV转换为以下形式的字典 A 1 B 4 C 7 A 2 B 5 C 8 A 3 B 6 C 9 到目前为止我正在尝试以下代码 import csv
  • Python FTP下载550错误

    我编写了一个 ftp 爬虫来下载特定文件 它会一直工作 直到找到要下载的特定文件 然后抛出此错误 ftplib error perm 550 该文件存在于我的下载文件夹中 但文件大小为 0 kb 我需要转换某些内容才能下载吗 我可以访问 f
  • 当元组列表中相同项目的值是字符串时,对它们的值求和

    如果我有这样的元组列表 my list books 5 books 10 ink 20 paper 15 paper 20 paper 15 我怎样才能把列表变成这样 books 15 ink 20 paper 50 即添加同一项目的费用
  • 如何在 python 中使用交叉验证执行 GridSearchCV

    我正在执行超参数调整RandomForest如下使用GridSearchCV X np array df features all features y np array df gold standard labels x train x
  • Kivy TextInput 水平和垂直对齐(文本居中)

    如何在 Kivy 的 TextInput 中水平居中文本 I have the following screen But I want to centralize my text like this 这是我的 kv 语言的一部分 BoxLa
  • Django 1.7:如何使用 html/css 文件作为模板发送电子邮件

    从 Django 1 7 开始 可以send email 使用新参数 html message 不幸的是 没有关于如何使用它的全面指南 新手友好 或者至少我找不到它 我需要使发送的电子邮件变得漂亮 因此 我试图弄清楚如何将我的消息包含到 h
  • 解析整数集的字符串并列出间隔

    I have 2 5 7 9 12 string 我想从中获取 2 5 7 8 9 12 列表 python中有没有内置的函数 Thanks UPD 我想 直接的答案是No 不管怎样 谢谢你的 片段 使用一个 建议者斯文 马尔纳克 s 2
  • 如何将Python包从旧版本安装到新版本?

    我正在使用 python 3 7 最近在 Linux 中安装了 python 3 8 是否有任何 bash 命令或脚本可以获取 3 7 的所有软件包列表并在 3 8 版本中一一安装 我想避免每个包裹都手工完成 注意 我将它们安装在我的系统中
  • 将函数按元素应用于两个 DataFrame

    如何应用函数z ij f x ij y ij 来自数据框X and Y相同大小并将结果保存到 DataFrameZ 这取决于你有什么样的功能 很多功能已经被矢量化为数据框 例如 等等 所以对于这些功能 你可以简单地做Z X Y or Z X
  • 将二进制数转换为包含每个二进制数的数组

    我试图将二进制值转换为每个 1 0 的列表 但我得到默认的二进制值而不是列表 我有一个字符串 我将每个字符转换为二进制 它给了我一个列表 其中每个字符都有一个字符串 现在我试图将每个字符串拆分为值为 0 1 的整数 但我什么也得不到 if

随机推荐

  • UE4 Slate 柱状图

    Fill out your copyright notice in the Description page of Project Settings include ZZTWidget h include Windows AllowWind
  • [Binospace] 深入分析HBase RPC(Protobuf)实现机制

    背景 在HMaster RegionServer内部 创建了RpcServer实例 并与Client三者之间实现了Rpc调用 HBase0 95内部引入了Google Protobuf作为中间数据组织方式 并在Protobuf提供的Rpc接
  • 类默认成员函数之拷贝构造函数

    学习完类中的默认成员函数 构造函数和析构函数 下一个学习的默认成员函数是拷贝构造函数 那么拷贝构造函数与前两个函数又有哪些区别呢 1 拷贝构造函数首先我们先知道它与构造函数构成重载 故函数名相同 我们先写一个最简单拷贝函数 class Da
  • C# 接口Get请求带Body

    这几天在调用第三方的接口遇到了GET请求并且还要带有body参数 并且参数类型还得是Json 在我的记忆力GET都是URL传参 网上找了好多方法都不行 用Postman调用可以请求到数据 但是C 代码怎么弄都不行 用Postman生成得代码
  • eclipse中提示的时候总是出现未响应的解决方案

    将eclipse自带的jre换成自己安装的jdk的jre Eclipse Window Preferences Java Installed JREs 选择jdk的安装路径 然后确定 之后勾选jdk就行了
  • java--基础--17.10--线程--CompletableFuture

    java 基础 17 10 线程 CompletableFuture 1 介绍 外链 防盗链机制 建议将图片保存下来直接上传 img Rf7tQZjW 1693300440049 image1 1 png 1 1 实现Future接口 实现
  • 反反复复

    法一 import java util ArrayList import java util Arrays import java util Collections import java util HashSet import java
  • 【C++】模板类的友元函数

    模板类友元函数 模板类的友元函数 参考 https blog csdn net dreamer lhs article details 53580088 区分 友元是否为函数模板 非模板友元 约束 bound 模板友元 友元类型取决于模板类
  • 【debug】python3 中关于“ ‘xx‘ object has no attribute ‘xx‘ “ 问题

    python3 中关于 xx object has no attribute xx 问题 python3 学习中关于 xx object has no attribute xx 问题 class Admin User 为User添加一个pr
  • volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗?

    volatile 变量是一种在Java中用于修饰字段的关键字 用于确保多线程之间的可见性和禁止指令重排序 volatile 修饰的变量具有以下特性 可见性 Visibility volatile 变量的值对所有线程都是可见的 当一个线程修改
  • python批量图片转pdf_批量将多个图片转PDF的记录

    本文记录了图片下载后转换成PDF的过程 期间用到了EXCEL和PYTHON 所有来源都是从网络上学习后 稍加整理并测试通过 阶段一 有规则的图片下载地址 之所以用Excel下载图片 主要是电脑上没有下载工具 于是找到以下代码 并稍加修改后
  • CUDA、CUDNN跑卷积神经网络报错CUDA error: CUBLAS_STATUS_EXECUTION_FAILED和CUDNN_STATUS_EXECUTION_FAILED

    笔者跑神经网络的时候遇到显存溢出问题 系统 Ubuntu 16 04 CUDA 10 0 130 CUDNN 7 6 4 38 Python 3 6 12 PYTORCH 1 2 TORCHVISION 0 4 卷积神经网络的代码用CPU跑
  • TypeScript 学习

    目录 TypeScript简介 一 TypeScript开发环境及编译的说明 二 TypeScript 基本类型 TypeScript简介 1 是javaScript的超集 2 对js进行了扩展 向js 中引入了类型的概念 并添加了许多新的
  • 【C++】模拟实现STL容器:vector

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 vector迭代器失效问题 1 Visual Stud
  • Scala安装教程(最详细教程)

    Scala安装教程 我们分别在Windows和ubuntu上安装Scala 但是在安装Scala之前有个前提是都要提前安装好JDK1 8以上的 如果没有安装请看Windows安装JDK和ubuntu安装JDK 一 Windows安装Scal
  • eclipse安装JAVA反编译插件

    eclipse安装JAVA反编译插件 1 Help Eclipse Marketplace 2 输入 Decompiler 搜索并安装此插件 3 或者输入 反编译 搜索并安装此插件 4 这里有几种不同的反编译插件工具的选择 可以先都选上 但
  • chatgpt赋能python:用Python编写手机APP的优势及方法

    用Python编写手机APP的优势及方法 随着移动互联网的快速发展 智能手机已经成为人们生活中不可缺少的一部分 越来越多的企业开始开发手机APP以便更好的服务用户 在开发手机APP的过程中 Python成为了一种备受关注的语言 本文将介绍P
  • Python基础之简单用户交互

    Python基础之简单用户交互 一 要求及目的 二 代码内容 三 学习总结 一 要求及目的 要求设计一个简单的计算程序 二 代码内容 简单计算 a input please input a first number b input plea
  • 常规键盘快捷键以及win10常用命令

    文章目录 常规键盘快捷键 win10常用命令 常规键盘快捷键 所有窗口最小化 win d 打开 我的电脑 win e 调出 运行 win r 全选 ctrl a 剪切 ctrl x 复制 ctrl c 粘贴 ctrl v 查找 ctrl f
  • python爬取唯品会商品信息

    目录 1 明确需求和抓包思路 2 发送请求 获取数据 3 解析数据 4 保存数据 5 最终效果 1 明确需求和抓包思路 目标 爬取唯品会中泳衣的商品信息 思路 点击F12打开抓包工具 gt 刷新页面 gt 搜索关键字找到我们想要的数据包 并