淘宝爬虫、数据分析、童装
requests爬虫
现在淘宝检索商品需要登录,所以需要获取自己账号的cookies,在chrome中F12就是一个简易的抓包插件,选择network标签,逐一查看包的header,发现search开头的包需要我的cookie
将画圈部分拷贝下来,用下列代码转化成字典格式
// An highlighted block
def extract_cookies(cookie):
cookies = dict([l.split("=", 1) for l in cookie.split("; ")])
return cookies
本项目需要爬取的信息为
通过在数据包内搜索某一在页面内商品名的关键词“小孩秋天”,定位到了存储本页面所有商品的数据包。
右击页面查看源代码
发现信息在页面源代码内且非异步加载
使用requests.get()方法获取想要的上述信息
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}
proxies = {'http': '119.191.79.46:80',
'http': '117.191.11.77:80',
}
# 代理ip,网上搜一个,猪哥使用的是 站大爷:http://ip.zdaye.com/dayProxy.html
# 尽量使用最新的,可能某些ip不能使用,多试几个。后期可以考虑做一个ip池
# 爬取淘宝ip要求很高,西刺代理免费ip基本都不能用,如果不能爬取就更换代理ip
file = requests.get(url,headers=headers,proxies=proxies,cookies=cookies)
#这里的cookies为字典化之后的
file.encoding = 'UTF-8'#编码中文
goods_match = re.search(r'g_page_config = (.*?)}};', file.text)
#正则表达式re.search(r'前面的东西 (.*?) 后面的东西',str)
goods_str = goods_match.group(1) + '}}' #加上group(1)是一般写法
goods_json = json.loads(goods_str) #将str转化成json格式,一种字典文件
数据处理
数据预处理
在数据预处理中,使用Jupiter Notebook一步步执行会比较清晰明了
import pandas as pd
df = pd.read_csv('taobao_goods.csv',encoding='utf-8')
df.drop(['comment_url'], inplace = True,axis=1)
df.head()
得到下图
处理缺失值
处理sales列
df['sales'] = df['sales'].str.replace('付款','')
df['sales'] = df['sales'].str.replace('人','')
df['sales'] = df['sales'].str.replace('+','')
sales_change = df['sales'].copy()
# 避免settingwithwarningcopy错误
for i in range(len(sales_change)):
if '万' in sales_change[i]:
sales_change[i] = sales_change[i].replace('万','')
sales_change[i] = sales_change[i].replace('.','')
sales_change[i] = sales_change[i]+'000'
处理location列
#从location列中取出省份和城市,然后删除location列
#lambda函数也叫匿名函数,即没有具体名称的函数,它允许快速定义单行函数,可以用在任何需要函数的地方
#这区别于def定义的函数
data['province']=data.location.apply(lambda x:x.split()[0])
data['city']=data.location.apply(lambda x:x.split()[0] if len(x)<4 else x.split()[1])
data.drop('location',axis=1, inplace=True)
for i in ['province','city']:
data[i]=data[i].astype('category')
保存csv
data.to_csv('taobao_goods_edited2.csv',index=False,encoding="utf_8_sig")
数据分析
title
对于商品名的分析,可以有
- 对商品名进行文本分析 词云可视化
- 不同关键词word对应的sales的统计分析
词云可视化
爬取的四千多条商品里,关键词出现最多的为儿童、宝宝、中大童、女童、春秋、洋气等
关键词的销量分析
由图表可知:
- 商品名有关键词“童装”最为畅销
- 商品名有“新款”表示新上市的商品有助于提高销量
- 儿童年龄段中宝宝、婴儿商品销量最高,中大童第二,小童第三。可能由于宝宝成长较快所以需求大,商家可以时刻准备批量加产宝宝类童装。
- 由于此次爬取的时间为秋季,所以秋装、春秋、长袖等销量很高
- 童装风格中洋气最受欢迎,潮、韩版等其次
- 材质方面,纯棉备受青睐
店名
通过默认的jieba分词,得到下图
可以看出来,由于各店名都为专属名词,分词的效果并不理想,这时,我想到人工剔除修饰词,仅留下店铺名
keyword = ['旗舰店', '官方', '童装', '母婴', '旗舰', '专营店']
for i in keyword:
data['store'] = data['store'].str.replace(i,'')
得到下图
这里,我不以品牌分类,如南极人飞雪专卖店和南极人挺酷专卖店显然卖的是一个品牌的童装,但我将他们看作两个主体,以便分析各个店差异对销量的影响。
分别进入南极人飞雪专卖店和南极人挺酷专卖店主页发现,前者的粉丝多达50w人,而后者仅7w人,且前者居然有直播介绍童装、也有各种促销活动。
基于此,如果时间允许,还可进一步获取每一商店的粉丝人数,商品人数,促销活动频率做特征预测模型等来判断某一商店是否具有竞争力。
价格、销量、商品数量
价格与商品数量
- 总体趋势:两者的关系近乎符合正太分布
- 价格定在50左右的商品数量最多
- 大多数商品定价在10-80之间
销量与商品数量
- 总体趋势为两者呈现负相关关系
- 销量在3000以下的商品居多
- 销量在10000以上的商品比较少
价格区间与销量
价格区间的划定标准为价格的频数,既保证每个区间中含有的商品的数量是相同的。
data['group']=pd.qcut(data.price,12)
- 总体趋势为价格越低,平均销量越高
- 平均销量最高为5-20区间,20-30其次
上图为不同价格区间商品的平均销量,下两张图为不同价格区间的销量分布
根据小提琴图和箱型图可以得知:
- 大多数商品销量集中在10000件以下
- 价格在5-39(即0、1、2)的商品异常值很高,表示这区间的商品有可能成为畅销商品
聚焦销量0-10000的图形表现与不同价格区间商品的平均销量图十分类似。
价格与销量
- 总体趋势:价格越高,销量越少
- 价格在200以下有高销量的潜力
- 价格在400以下有高销量额的潜力
如果商家在于提高流量,最好定价低于100;而如果商家接单较多,应接不暇,做高质量高价格的衣服也可能在销量较小的情况下得到较大的销售额。
各地区情况
不同省份的商品数量分布
可以看出来,童装网店在浙江的商品数量最多,江苏其次,广东第三。
不同省份的商品平均销量分布
可以看出来,童装网店在河南的平均销量最多,天津其次,河北第三。而商品数量第一的浙江在平均销量的排名为第八。
不同城市的商品销量总和分布
可以看出来,童装网店在杭州的销量总和最多,湖州其次,商丘第三。其中,杭州和湖州都属于浙江。总体来看,浙江生产的童装最受欢迎,而浙江平均销量低是因为商品数量这个分母特别大的原因。