本次内容:
爬取电商平台数据,python爬取某维商品数据
课程亮点
- 动态数据抓包演示
- json数据解析
- requests模块的使用
- 保存csv
环境介绍
- python 3.8 [最好用和老师一样的版本]
- pycharm 2021.2 专业版 yyds
- requests >>> pip install requests
- csv
安装方法:
win + R 输入cmd 输入安装命令 pip install 模块名
如果出现爆红 可能是因为 网络连接超时 切换国内镜像源
相对应的安装包/安装教程/激活码/使用教程/学习资料/工具插件 可以私我领取哦~
思路流程: (爬虫最基本流程)
一. 数据来源分析
分析我们想要的数据 可以从哪里获取
- 通过开发者工具分析可得 一页商品 120条数据 他分为三组内容 50 50 20
- 每个url地址需要的商品ID 前50个ID为一组 中间50个ID为一组 最后20个ID为一组
- 去分析 我们商品ID从哪里来的…
如果想要通过爬取获取这些数据
- 首先获取所有商品ID
- 进行分组分类(切片) 前50 中50 后20
- 把这些传入 商品数据包里面 就可以得到 商品数据
二. 代码实现步骤
- 发送请求, 对于ID的网址发送你请求
- 获取数据, 获取服务器返回的数据内容
- 解析数据, 提取我们想要商品ID
- 发送请求, 把商品ID传入 商品数据包url里面
- 获取数据, 获取服务器返回的数据内容
- 解析数据, 提取我们想要商品数据信息
- 保存数据, 把数据保存csv表格文件
- 多页爬取
- 查看结果
爬虫 [模拟]浏览器对于服务器发送请求
首先导入模块
# 导入数据请求模块
import requests # pip install requests 在cmd里面或者pycharm终端里面安装
# 导入格式化输出模块
import pprint
# 导入csv模块
import csv
# 导入时间模块
import time
后续代码
# 创建一个csv文件
f = open('口红data.csv', mode='a', encoding='utf-8', newline='')
# 调用csv方法
csv_writer = csv.DictWriter(f, fieldnames=[
'标题',
'品牌',
'原价',
'折扣',
'售价',
'属性',
'详情页',
])
csv_writer.writeheader()
headers = {
# 'cookie': 'vip_cps_cuid=CU1641815302342da2eee44221f3c0d4; vip_cps_cid=1641815302345_f63fc9087855c60e21a2950b0189ec24; cps_share=cps_share; vip_wh=VIP_NH; cps=adp%3Antq8exyc%3A%40_%401641815302344%3Amig_code%3A4f6b50bf15bfa39639d85f5f1e15b10f%3Aac014miuvl0000b5sq8cx6g534o9fx83; PAPVisitorId=8d9d410e1944339b815ec911aa7f9714; vip_new_old_user=1; vip_address=%257B%2522pname%2522%253A%2522%255Cu5e7f%255Cu4e1c%255Cu7701%2522%252C%2522pid%2522%253A%2522104104%2522%252C%2522cname%2522%253A%2522%255Cu5e7f%255Cu5dde%255Cu5e02%2522%252C%2522cid%2522%253A%2522104104101%2522%257D; vip_province=104104; vip_province_name=%E5%B9%BF%E4%B8%9C%E7%9C%81; vip_city_name=%E5%B9%BF%E5%B7%9E%E5%B8%82; vip_city_code=104104101; user_class=a; mst_area_code=104104; mars_sid=da8baa5d8a2c73dba298da602ff87292; mars_pid=0; visit_id=A7C92212D3DF003A212EB6666C36D2C3; VipUINFO=luc%3Aa%7Csuc%3Aa%7Cbct%3Ac_new%7Chct%3Ac_new%7Cbdts%3A0%7Cbcts%3A0%7Ckfts%3A0%7Cc10%3A0%7Crcabt%3A0%7Cp2%3A0%7Cp3%3A1%7Cp4%3A0%7Cp5%3A0%7Cul%3A3105; vip_access_times=%7B%22list%22%3A2%7D; pg_session_no=7; vip_tracker_source_from=; mars_cid=1641815303238_957cedc5b831e57207fd8334dcd97297',
'referer': 'https://category.vip.com/', # referer 防盗链 告诉服务器我们的请求的url地址 是从哪里跳转过来的
# user-agent 用户代理 浏览器基本身份标识
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}
def get_shop_info(shop_id):
"""获取商品数据信息"""
shop_url = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2'
# 批量替换 选择要替换的内容 ctrl + R 输入 正则表达式命令
data = {
# 'callback': 'getMerchandiseDroplets1',
'app_name': 'shop_pc',
'app_version': '4.0',
'warehouse': 'VIP_NH',
'fdc_area_id': '104104101',
'client': 'pc',
'mobile_platform': '1',
'province_id': '104104',
'api_key': '70f71280d5d547b2a7bb370a529aeea1',
'user_id': '',
'mars_cid': '1641815303238_957cedc5b831e57207fd8334dcd97297',
'wap_consumer': 'a',
'productIds': shop_id,
'scene': 'search',
'standby_id': 'nature',
'extParams': '{"stdSizeVids":"","preheatTipsVer":"3","couponVer":"v2","exclusivePrice":"1","iconSpec":"2x","ic2label":1}',
'context': '',
'_': '1641816680425',
}
response = requests.get(url=shop_url, params=data, headers=headers)
# print(response.json())
# pprint.pprint(response.json())
products = response.json()['data']['products']
for i in products:
# pprint.pprint(i)
# 创建一个字典 把数据内容传入字典
shop_attrs_list = [j['name'] + ':' + j['value'] for j in i['attrs']]
shop_attrs = ','.join(shop_attrs_list)
href = f'https://www.vipglobal.hk/detail-{i["brandId"]}-{i["productId"]}.html'
# ['色系:红调', '妆感:水润', ]
dit = {
'标题': i['title'],
'品牌': i['brandShowName'],
'原价': i['price']['marketPrice'],
'折扣': i['price']['mixPriceLabel'],
'售价': i['price']['salePrice'],
'属性': shop_attrs,
'详情页': href
}
# print(shop_attrs)
csv_writer.writerow(dit)
print(dit)
for page in range(0, 601, 120):
time.sleep(1)
# 1. 发送请求, 对于ID的网址发送你请求
url = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/search/product/rank' # 确定url地址
# 请求参数
data = {
# 'callback': 'getMerchandiseIds',
'app_name': 'shop_pc',
'app_version': '4.0',
'warehouse': 'VIP_NH',
'fdc_area_id': '104104101',
'client': 'pc',
'mobile_platform': '1',
'province_id': '104104',
'api_key': '70f71280d5d547b2a7bb370a529aeea1',
'user_id': '',
'mars_cid': '1641815303238_957cedc5b831e57207fd8334dcd97297',
'wap_consumer': 'a',
'standby_id': 'nature',
'keyword': '口红',
'lv3CatIds': '',
'lv2CatIds': '',
'lv1CatIds': '',
'brandStoreSns': '',
'props': '',
'priceMin': '',
'priceMax': '',
'vipService': '',
'sort': '0',
'pageOffset': page,
'channelId': '1',
'gPlatform': 'PC',
'batchSize': '120',
'_': '1641816680423',
}
# 请求头 把python代码伪装成浏览器发送请求(模拟成浏览器发送请求)
# 发送请求
response = requests.get(url=url, params=data, headers=headers)
# 打印response数据 <Response [903]> 服务器给特定状态码 你请求失败了
# <Response [200]> 200请求成功
# 获取响应体什么数据response.json() 获取响应json字典数据
# 字典取值 根据冒号左边的内容 提取冒号右边的内容
# products = response.json()['data']['products']
# lis = [] # 创建一个空列表
# for index in products:
# pid = index['pid']
# lis.append(pid) # 往列表里面添加元素
# # print(pid)
# print(lis)
pid_list = [index['pid'] for index in response.json()['data']['products']]
# print(pid_list)
# 切片 分为三组 前50 中间 50 最后 20
# [起始:结束:步长] 不写起始默认是0 不写步长默认 1 不写结束默认到最后
# split 字符串分割方法 strip 去除字符串左右两端空格
# 用 , 把列表里面所有元素合并起来
string_1 = ','.join(pid_list[:50])
string_2 = ','.join(pid_list[50:100])
string_3 = ','.join(pid_list[100:])
# 把列表转成字符串 join
# string_4 = ','.join(pid_list)
get_shop_info(string_1)
get_shop_info(string_2)
get_shop_info(string_3)
模块安装问题:
如果安装python第三方模块:
- win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
- 在pycharm中点击Terminal(终端) 输入安装命令
安装失败原因:
失败一:
pip 不是内部命令
解决方法: 设置环境变量
失败二: 出现大量报红 (read time out)
解决方法: 因为是网络链接超时, 需要切换镜像源
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名
失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入
解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可)
卸载一个就好或者你pycharm里面python解释器没有设置好
如何配置pycharm里面的python解释器?
- 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
- 点击齿轮, 选择add
- 添加python安装路径
pycharm如何安装插件?
- 选择file(文件) >>> setting(设置) >>> Plugins(插件)
- 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese
- 选择相应的插件点击 install(安装) 即可
- 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效
好了,我的这篇文章写到这里就结束啦!
有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!