[实战]我们爬取了20W条淘宝销售记录,只为了知道哪种月饼更受欢迎!

引言

中秋佳节我们要吃传统美食——月饼。小编忽然间有个想法,想要知道在淘宝上哪种月饼更受欢迎。说干就干,立马操练起来~

需求分析

通过爬取淘宝散装月饼销售记录,对用户购买过的月饼进行统计,分析最受欢迎的月饼种类。由于搜索关键字“月饼”会出现很多套装礼盒,影响我们的判断数据,所以我们将关键字定位“散装月饼”。

最终需求定为:爬取淘宝“散装月饼”搜索结果中,所有产品的评价,通过评价中展示的月饼馅类型,进行分析。

知识点

爬取数据:requests库

多线程:ThreadPoolExecutor

图形分析:pyecharts

获取产品ID

首先登陆淘宝网,打开开发者工具,搜索关键字“散装月饼”,观察URL。点击下一页,再次观察URL。下面列出前三页的URL。

第一页:https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20180924&stats_click=search_radio_all%3A1&js=1&imgfile=&q=%E6%95%A3%E8%A3%85%E6%9C%88%E9%A5%BC&suggest=0_1&_input_charset=utf-8&wq=%E6%95%A3%E8%A3%85&suggest_query=%E6%95%A3%E8%A3%85&source=suggest

第二页:https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20180924&stats_click=search_radio_all%3A1&js=1&imgfile=&q=%E6%95%A3%E8%A3%85%E6%9C%88%E9%A5%BC&suggest=0_1&_input_charset=utf-8&wq=%E6%95%A3%E8%A3%85&suggest_query=%E6%95%A3%E8%A3%85&source=suggest&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44

第三页:https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20180924&stats_click=search_radio_all%3A1&js=1&imgfile=&q=%E6%95%A3%E8%A3%85%E6%9C%88%E9%A5%BC&suggest=0_1&_input_charset=utf-8&wq=%E6%95%A3%E8%A3%85&suggest_query=%E6%95%A3%E8%A3%85&source=suggest&bcoffset=0&ntoffset=6&p4ppushleft=1%2C48&s=88

这是前三个页面的URL,可以发现,除了"q="和"s="后面的数据不一样,其他的都是一样的,因此,可以把URL简化为:

https://s.taobao.com/search?q=keyword&s=pagenum

其中,q代表搜索的关键词,s代表商品列表的页数,0代表第一页,44代表第二页,88代表第三页……以此URL抓取商品的ID等信息。

此部分代码如下:

def get_product_id_list(num,all_product_list):
    base_url = "https://s.taobao.com/search"
    params = {
        "q":"月饼散装",
        "s":num*44,
    }

    r = requests.get(base_url,params=params,headers=headers)

    nids=re.findall(pattern='"nid":"(.*?)"',string=r.text)

    for nid in nids:
        if nid not in all_product_list:
            all_product_list.append(nid)

    print("第%s页product-id提取完成"%num)
    return all_product_list

获取月饼种类

上述代码可以获取到商品ID,利用商品ID信息,跳转到具体的商品详情页面,对其评论进行抓取。点击商品详情页的评论信息,可以看到调用了如下的接口信息:

上面的接口信息,我们去除不必要的参数,可以得到链接: https://rate.taobao.com/feedRateList.htm?auctionNumId=575182860576&currentPageNum=1 。推测auctionNumId为产品ID,currentPageNum为当前评论页数。根据上述分析,我们可以得到用户评论中的产品信息。部分代码如下:

    while True:
        params = {
            "auctionNumId":product_id,
            "currentPageNum":currentPageNum
        }
        r = requests.get(base_url,params=params,headers=headers)
        try:
            data = eval(r.text.strip("(").strip(")").replace("true","True").replace("false","False").replace("null","None"))
            total = data["total"]
        except:
            total = 0
        if total != 0:
            comments = data["comments"]
            for comment in comments:
                auction = comment["auction"]
                sku = auction["sku"]
                if sku in product.keys():
                    product[sku] += 1
                else:
                    product[sku] = 1
        else:
            break
        print("第%s条商品的第%s页评论爬取完成"%(num,currentPageNum))
        currentPageNum += 1
    print("第%s条商品的评论爬取完成" % num)

最后将爬取结果分类整理至本地文件。(代码略)

数据分析

通过上述的爬虫,我们最终爬取了22W条月饼销售记录。最后形成柱形图、饼图及词云图。

根据上述内容可以看到,除去礼盒类型,蛋黄、五仁、莲蓉、火腿为销售数量比较多的。(此部分统计数据是将杂项去除之后的数据)

除了按照馅的种类进行划分之外,我们还可以根据产地进行划分。结果如下图所示。

按照口味划分:

按照月饼皮类型分类:

以上数据均为部分数据,分析结果仅供参考!

源码

链接:https://pan.baidu.com/s/1ZHaOvyt1wRrzZOZnHthTjw 密码:27em

猜你喜欢

转载自blog.csdn.net/zhusongziye/article/details/83421364