• 甜咸粽子党大战,Python爬取淘宝上的粽子数据并进行分析


    前言

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    爬虫

    爬取淘宝数据,本次采用的方法是:Selenium控制Chrome浏览器自动化操作。其实我们还可以利用Ajax接口来构造链接,但是非常繁琐(包含加密密钥等),直接使用Selenium来模拟浏览器会省去很多事情;

    最常见的问题是chromedriver驱动与谷歌浏览器的版本不匹配,很容易就可以解决。接下来,我们就开始利用selenium抓取淘宝商品,并使用Xpath解析得到商品名、价格、付款人数、店铺名、发货地址信息,最后将数据保存在本地。

    爬虫过程如下图:

     

    selenium自动化爬取(需要淘宝扫描登录一次)

    from selenium import webdriver
    
    # 搜索商品,获取商品页码
    def search_product(key_word):
        # 定位输入框
        browser.find_element_by_id("q").send_keys(key_word)
        # 定义点击按钮,并点击
        browser.find_element_by_class_name('btn-search').click()
        # 最大化窗口:为了方便我们扫码
        browser.maximize_window()
        # 等待15秒,给足时间我们扫码
        time.sleep(15)
        # 定位这个“页码”,获取“共100页这个文本”
        page_info = browser.find_element_by_xpath('//div[@class="total"]').text
        # 需要注意的是:findall()返回的是一个列表,虽然此时只有一个元素它也是一个列表。
        page = re.findall("(d+)",page_info)[0]
        return page

    详细爬虫代码下载见文末。

    数据整理

    此时我们爬取得到的数据:

     

    整理前的数据

    数据还是比较粗糙的,有几个问题需要我们去处理:

    1. 添加列名
    2. 去除重复数据(翻页爬取过程中会有重复)
    3. 购买人数为空的记录,替换成0人付款
    4. 将购买人数转换为销量(注意部分单位为万)
    5. 删除无发货地址的商品,并提取其中的省份

    部分代码:

    # 删除无发货地址的商品,并提取省份
    df = df[df['发货地址'].notna()]
    df['省份'] = df['发货地址'].str.split(' ').apply(lambda x:x[0])
    
    # 删除多余的列
    df.drop(['付款人数', '发货地址', 'num', 'unit'], axis=1, inplace=True)
    
    # 重置索引
    df = df.reset_index(drop=True)
    df.head(10) 

     

    整理后的数据

    这样我们就对数据完成了清洗与整理,方便下一步进行可视化。

    顺便做个排序,看看什么粽子最贵!

    df1 = df.sort_values(by="价格", axis=0, ascending=False)
    df1.iloc[:5,:]

     

    价格TOP5的粽子

    前三名都来自御茶膳房旗舰店,让我们看看1780元的粽子长啥样吧!

     

    想尝尝

    数据可视化

    本文我们打算用pyecharts进行可视化展示。有同学可能使用的是老版本(0.5X),Pyecharts的1.x版本与老版本(0.5X)不兼容,如果无法导入可能是这个问题哈。

    可视化所有语句均基于v1.7.1,通过以下语句可查询你的pyecharts版本:

    import pyecharts
    
    print(pyecharts.__version__)

    扇形图

    最贵的粽子1780元看来是吃不起了,那大家都买什么价位的呢?

    先按照淘宝推荐的区间划分一下:

    def price_range(x): #按照淘宝推荐划分价格区间
        if x <= 22:
            return '22元以下'
        elif x <= 115:
            return '22-115元'
        elif x <= 633:
            return '115-633元'
        else:
            return '633元以上'

    再使用pyecharts来生成不同价格区间的粽子销量占比图。

     

    不同价格区间的粽子销量占比

    看来百元以内的粽子(礼盒装)才是大家的正常承受范围,不过我还是选择小区门口的5块钱3个。

    词云图

    我们用jieba对爬取得到的商品名称分词,生成词云。

    from pyecharts.charts import WordCloud
    from pyecharts.globals import SymbolType
    
    # 词云图
    word1 = WordCloud(init_opts=opts.InitOpts(width='1350px', height='750px'))
    word1.add("", [*zip(key_words.words, key_words.num)],
              word_size_range=[20, 200],
              shape=SymbolType.DIAMOND)
    word1.set_global_opts(title_opts=opts.TitleOpts('粽子商品名称词云图'),
                          toolbox_opts=opts.ToolboxOpts())
    word1.render("粽子商品名称词云图.html")

     

    粽子商品名称词云图

    硕大的粽子周围环绕着几个突出的关键词:礼盒装、鲜肉、蛋黄、嘉兴、豆沙、端午节。除去端午节相关的词汇,我们通过关键词大小似乎就知道几种口味的受欢迎情况。

    查阅资料对比一下,还真是大体一致。

    心疼我枣粽。

    至于嘉兴这个地名,我们后文会继续提到。

     

    条形图

    上文我们查到了最贵的粽子,那么销量最好的粽子/店铺是什么呢?

    安排

     

    粽子商品销量Top10

    五芳斋共4款入围,其中一款礼盒装达到了100万+的销量,应该比这个还多(参见微信的10w+)。真真老老紧随其后,3款粽子进入TOP10。其余的品牌还有稻香村和知味观,额,第九名是卖粽叶的,看来自己包粽子的需求也是蛮大的嘛。

     

    粽子店铺销量Top10

    粽子店铺销量Top10其实与商品相似,五芳斋官方旗舰店和真真老老旗舰店占据首位,遥遥领先。

    经过查阅,五芳斋,真真老老,都为嘉兴的粽子两大品牌,那难怪嘉兴在词云图里那么突出。嘉兴属于浙江省,销量冠亚军都在这里,那浙江岂不是占比很大。

    地图

    继续使用pyecharts来生成各省份粽子销量分布图

    from pyecharts.charts import Map 
    
    # 计算销量
    province_num = df.groupby('省份')['销量'].sum().sort_values(ascending=False) 
    
    # 绘制地图
    map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))
    map1.add("", [list(z) for z in zip(province_num.index.tolist(), province_num.values.tolist())],
             maptype='china'
            ) 
    map1.set_global_opts(title_opts=opts.TitleOpts(title='各省份粽子销量分布'),
                         visualmap_opts=opts.VisualMapOpts(max_=300000),
                         toolbox_opts=opts.ToolboxOpts()
                        )
    map1.render("各省份粽子销量分布.html")

     

    各省份粽子销量分布

    这个销量占比差异真的是太大了。

    可以说中国粽子看浙江,浙江粽子看嘉兴[3](通过计算发货地址为浙江的粽子销量占比70.6%,而嘉兴占浙江的87.4%)

     

    纪录片《舌尖上的中国》里的嘉兴粽

  • 相关阅读:
    TeamViewer的替代品:realVNC
    Introduction of Generator in Python
    Excel: assign label to scatter chart using specific cell values
    reverse/inverse a mapping but with multiple values for each key
    虚拟化与云计算
    现代计算机简介
    CentOS 7 安装中网络设置111
    机械硬盘原理
    文件系统
    最重要的块设备——硬盘
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13162690.html
Copyright © 2020-2023  润新知