zoukankan      html  css  js  c++  java
  • 甜咸粽子党大战,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%)

     

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

  • 相关阅读:
    【转】VS2010中 C++创建DLL图解
    [转]error: 'retainCount' is unavailable: not available in automatic reference counting mode
    [转]关于NSAutoreleasePool' is unavailable: not available in automatic reference counting mode的解决方法
    【转】 Tomcat v7.0 Server at localhost was unable to start within 45
    【转】Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If
    【转】SVN管理多个项目版本库
    【转】eclipse安装SVN插件的两种方法
    【转】MYSQL启用日志,和查看日志
    【转】Repository has not been enabled to accept revision propchanges
    【转】SVN库的迁移
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13162690.html
Copyright © 2011-2022 走看看