爬取淘宝商品信息之数据分析篇

淘宝爬虫请戳:https://blog.csdn.net/weixin_43746433/article/details/97623511
Github:https://github.com/why19970628/Python_Crawler/tree/master/taobao

1.准备工作

1.1 项目目的:

  • 对商品标题进行文本分析以及词云可视化
  • 商品价格分布情况分析
  • 商品的销量分布情况分析
  • 商品价格对销量的影响分析
  • 商品价格对销售额的影响分析
  • 不同省份或城市的商品数量分布

1.3 项目步骤:

  • 数据采集模块:利用Python爬虫爬取淘宝网商品数据
  • 数据预处理模块:对商品数据进行清洗和处理
  • 数据分析模块:jieba分词、wordcloud可视化、数据分析及可视化、pyecharts绘图

1.3 项目环境:

  • 系统环境:win10 64位
  • 工具:pycharm,chrome,Anaconda

2.数据预处理

2.1 导入数据

import pandas as pd
import numpy as np
import pymysql
import re
coon = pymysql.connect(
    host='localhost', user='root', passwd='root',
    port=3306, db='taobao', charset='utf8'
    # port必须写int类型
    # charset必须写utf8,不能写utf-8
)
cur = coon.cursor()  # 建立游标
sql='select * from taobao_food'
df=pd.read_sql(sql=sql,con=coon)
#print(df.values)
df=pd.DataFrame(df)
df=df.drop('id',axis=1)
print(pd.isnull(df).values.any())

在这里插入图片描述

2.2 去重

print('去重之前的形状',df.shape)
df=df.drop_duplicates(keep='first')
print('去重之后的形状',df.shape)
print(df.head())

在这里插入图片描述

2.3 提取地址信息以及购买数量

def get_buy_num(buy_num):
    if u'万' in buy_num:  # 针对1-2万/月或者10-20万/年的情况,包含-
        buy_num=float(buy_num.replace("万",''))*10000
        #print(buy_num)
    else:
        buy_num=float(buy_num)
    return buy_num



df['place'] = df['place'].replace('','未知')#fillna("['未知']")
datasets = pd.DataFrame()
for index, row in df.iterrows():
    #print(row["place"])
    row["place"] = row["place"][:2]
    row["buy_num"]=get_buy_num(row["buy_num"][:-3].replace('+',''))
    #print(row["place"])

df.to_csv('taobao_food.csv',encoding='utf8',index_label=False)

3. 数据分析

3.1 对商品标题进行文本分析以及词云可视化

  • 标题关键词前100的统计
[('零食', 2546), ('小吃', 2106), ('特产', 2047), ('糕点', 1518), ('休闲', 972), ('点心', 874), ('早餐', 736), ('传统', 619), ('整箱', 536), ('手工', 506), ('面包', 460), ('蛋糕', 377), ('牛肉', 359), ('麻辣', 330), ('正宗', 329), ('特色', 300), ('好吃', 287), ('四川', 269), ('熟食', 265), ('肉干', 259), ('肉松', 246), ('香辣', 246), ('500g', 245), ('蛋黄', 231), ('南京', 230), ('猪肉', 222), ('礼包', 206), ('包装', 198), ('礼盒', 195), ('卤味', 194), ('饼干', 192), ('速食', 189), ('大礼', 189), ('大礼包', 187), ('真空', 187), ('办公', 185), ('散装', 184), ('麻薯', 180), ('即食', 170), ('营养', 160), ('办公室', 160), ('公室', 160), ('麻花', 160), ('牛肉干', 156), ('方便', 155), ('南特', 143), ('芝麻', 142), ('点点', 141), ('绿豆', 139), ('百草', 138), ('北京', 135), ('糯米', 129), ('肉类', 127), ('肉脯', 124), ('小包', 123), ('风味', 122), ('袋装', 122), ('夹心', 114), ('酥饼', 112), ('西特', 112), ('松饼', 108), ('辣味', 108), ('盒装', 107), ('小包装', 105), ('陕西', 103), ('烧饼', 102), ('千丝', 102), ('螺蛳', 101), ('云南', 100), ('重庆', 97), ('200g', 96), ('原味', 96), ('曲奇', 93), ('台湾', 93), ('组合', 92), ('杭州', 88), ('特色美食', 88), ('潮汕', 88), ('桂花', 87), ('蒸蛋', 86), ('香酥', 85), ('口味', 83), ('10', 83), ('柳州', 82), ('湖南', 82), ('广东', 82), ('松鼠', 79), ('成都', 79), ('三只', 77), ('稻香', 77), ('稻香村', 76), ('批发', 75), ('厦门', 73), ('舌尖', 73), ('地方', 72), ('豆饼', 71), ('鲜花', 71), ('300g', 69), ('雪花', 68), ('美食网', 68), ('花生', 68)]
  • 词云的实现
    在这里插入图片描述
    代码如下:
import pandas as pd
import jieba, re
from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator, STOPWORDS
import matplotlib.pyplot as plt
fr = open('停用词.txt', 'r')
    stop_word_list = fr.readlines()
    new_stop_word_list = []
    for stop_word in stop_word_list:
        stop_word = stop_word.replace('\ufeef', '').strip()
        new_stop_word_list.append(stop_word)
file1 = df.loc[:,'title'].dropna(how='any')  # 去掉空值
print('去掉空值后有{}行'.format(file1.shape[0]))  # 获得一共有多少行
print(file1.head())
text1 = ''.join(i for i in file1)  # 把所有字符串连接成一个长文本
responsibility = re.sub(re.compile(',|;|\.|、|。'), '', text1)  # 去掉逗号等符号
wordlist1 = jieba.cut(responsibility, cut_all=True)
print(wordlist1)
word_dict={}
word_list=''

for word in wordlist1:
    if (len(word) > 1  and not word in new_stop_word_list):
        word_list = word_list + ' ' + word
        if (word_dict.get(word)):
            word_dict[word] = word_dict[word] + 1
        else:
            word_dict[word] = 1

print(word_list)
print(word_dict) #输出西游记 词语出现的次数

#按次数进行排序
sort_words=sorted(word_dict.items(),key=lambda x:x[1],reverse=True)
print(sort_words[0:101])#输出前0-100的词


font_path = r'C:\Windows\Fonts\SIMYOU.TTF'

#bgimg=imread(r'1.png')#设置背景图片
wc = WordCloud(font_path=font_path,  # 设置字体
               background_color="black",  # 背景颜色
               max_words=300,  # 词云显示的最大词数
               stopwords=stopwords,  # 设置停用词
               max_font_size=400,  # 字体最大值
               random_state=42,  # 设置有多少种随机生成状态,即有多少种配色
               width=2000, height=1720,
               margin=4,  # 设置图片默认的大小,margin为词语边缘距离
               ).generate(str(word_list))
#image_colors = ImageColorGenerator(bgimg)  # 根据图片生成词云颜色
plt.imshow(wc)
plt.axis("off")
plt.savefig("examples.jpg")  # 必须在plt.show之前,不是图片空白
plt.show()

3.2 商品的销量排名的商铺信息

print(df['buy_num'].sort_values(ascending=False))
print(df.loc[df['buy_num'].sort_values(ascending=False).index,'shop'])
a=df['buy_num'].sort_values(ascending=False)
b=df.loc[df['buy_num'].sort_values(ascending=False).index,'shop']
c=df.loc[df['buy_num'].sort_values(ascending=False).index,'title']
frames = [a,b,c]
data=pd.concat(frames,axis=1)
print(data)

在这里插入图片描述

3.3 商品的销量排名情况分析

a=df['buy_num'].sort_values(ascending=False)
b=df.loc[df['buy_num'].sort_values(ascending=False).index,'place']
c=df.loc[df['buy_num'].sort_values(ascending=False).index,'shop']
frames = [a,c,b]
data=pd.concat(frames,axis=1)
print('销售排名商店与所在城市信息分布\n',data)

在这里插入图片描述
可以看到,安徽的三只松鼠店铺的销量登顶,而且它的很多产品都十分火爆!其次可以看到淘宝上海的天猫超市很多产品的销量也名类前茅。根据以上信息,我们也可以获取在淘宝上美食销量最高的城市排名。

3.4 商品总销量的城市排名

buy_num_sum=df.groupby(['place'])['buy_num'].sum().sort_values(ascending=False)
print('地区销售总量信息分布\n',buy_num_sum)

在这里插入图片描述

  • 地区销售总量信息分布图
brougt=buy_num_sum.values.tolist()
address=buy_num_sum.index.tolist()

map = Map("地区销售总量信息分布", "data from 51job",title_color="#404a59", title_pos="left")
map.add("销售总量", address,brougt , maptype='china',visual_range=[0, 300000],is_visualmap=True,visual_text_color='#000',is_label_show=True,is_map_symbol_show=False)
map.render("地区销售总量信息分布图.html")

在这里插入图片描述
果不其然,安徽和上海的美食总销量处于TOP级别的位置

3.5 店铺所在城市分布情况

print('place值\n',df['place'].value_counts()[:10])

可以看出,大部分还是在沿海城市发货
在这里插入图片描述

可以看出,销售地区大部分都集中在运输方便的沿海城市。

3.6 店铺计数

print('所有店铺的计数:\n',df['shop'].value_counts()[:20])

在这里插入图片描述

from pyecharts import Bar
bar = Bar('所有店铺信息统计','直方图',width = 1200, height = 800)
#bar.use_theme('dark')
kwargs = dict(
    name = '店铺数量',
    x_axis = a,
    y_axis = b,
    #bar_category_gap = 20,
    xaxis_name='店铺',
    xaxis_name_pos= "start",
    xaxis_name_size='50',
    xaxis_name_gap= 10,  # x轴名称与轴线的距离 默认=25
    yaxis_name='数量',
    interval='0',#显示完全标签,1为隔一个显示
    xaxis_rotate='30',
    is_label_show=True,#显示数量

)
bar.add(**kwargs)
bar.render('直方图.html')

在这里插入图片描述
天猫超市不亏为淘宝的亲儿子,商品种类挺多的!

3.7 商品价格与销售额的关系分析

a=df.loc[df['buy_num'].sort_values(ascending=False).index,'price']
b=df['buy_num'].sort_values(ascending=False)
frames = [a,b]
data=pd.concat(frames,axis=1).reset_index()
print('商品价格对销售额的影响分析',data)
from pyecharts import Line
line = Line("商品价格对销售额的影响分析")
line.add("价格随销量降低而变化",data['price'].index,data['price'], is_smooth=True,mark_line=["max", "average"])
line.render('折线图1.html')

在这里插入图片描述
可以明显看出,随着销售额的下降,商品的售卖价格也在增高。换句话说,销量排名靠前的商品大部分价格都不高,人们也倾向于购买价格实惠的美食。

结语:对爬取淘宝的美食数据分析进行初步汇总。
对于pandas的使用也熟练了不少,
但是个人还是比较懒的,就画了这个图,越来越水博客了。。。
有空的话就把文章再整理下吧

  • 17
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Scrapy 是一个强大的 Python 爬虫框架,可以用来爬取各种网站并分析数据。在这里,我将向你介绍如何使用 Scrapy 爬取淘宝商品信息并分析数据。 首先,我们需要创建一个 Scrapy 项目。打开终端,输入以下命令: ``` scrapy startproject taobao ``` 这将创建一个名为 taobao 的 Scrapy 项目。接下来,我们需要创建一个 Spider 来爬取淘宝商品信息。在 taobao 目录下,输入以下命令: ``` scrapy genspider taobao_spider taobao.com ``` 这将创建一个名为 taobao_spider 的 Spider,用于爬取淘宝网站上的商品信息。 接下来,我们需要配置 Spider。打开 taobao/spiders/taobao_spider.py 文件,找到 parse 方法,并添加以下代码: ``` def parse(self, response): items = TaobaoItem() product_list = response.xpath('//div[@class="item J_MouserOnverReq "]') for product in product_list: items['name'] = product.xpath('.//img/@alt').get() items['price'] = product.xpath('.//strong/text()').get() yield items ``` 这段代码将从淘宝网站上爬取商品的名称和价格,并将其存储在一个名为 TaobaoItem 的对象中。最后,我们使用 yield 关键字将这个对象传递给 Scrapy 引擎。 接下来,我们需要定义 TaobaoItem。打开 taobao/items.py 文件,并添加以下代码: ``` import scrapy class TaobaoItem(scrapy.Item): name = scrapy.Field() price = scrapy.Field() ``` 这将定义一个名为 TaobaoItem 的类,其中包含商品名称和价格两个属性。 现在,我们需要运行 Spider。回到终端,输入以下命令: ``` scrapy crawl taobao_spider -o taobao.csv ``` 这将运行名为 taobao_spider 的 Spider,并将爬取到的商品信息存储在名为 taobao.csv 的 CSV 文件中。 最后,我们可以使用 Pandas 或其他数据分析工具来分析数据。例如,可以使用以下代码读取 CSV 文件并显示前五行数据: ``` import pandas as pd data = pd.read_csv('taobao.csv') print(data.head()) ``` 这将输出 CSV 文件中的前五行数据。 以上就是使用 Scrapy 爬取淘宝商品信息并分析数据的简单教程。希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值