python爬取某东实战|358元的月饼凭什么能卖20万单?

Python之王

共 12274字,需浏览 25分钟

 ·

2021-09-24 15:05

文 |沐沐
来源:GOGO数据「ID: mu_science」





背景介绍



中秋节快到了,现在网上全是铺天盖地的月饼广告。
所以咱们今天就是用爬虫来获取JD销量排行榜第一的月饼,价值 ¥358 的月饼销量竟然达20万+单,这是什么神仙月饼?




需求分析



好评达到98%的月饼也就是说20万人中有19.6万人是对这款月饼认可满满的
接下来我们就来获取折这款月饼的评论
看看它究竟有多好吃?

我们先来找到评论对应的真实链接,如下:
我们本次获取的目标有
用户昵称、产品评分、产品类型、评论时间、
评论点赞数和回复数还有具体评论内容等七项内容


网页分析





从图中我们要获取的内容都在当前页面中,我们使用浏览器打开格式如下:
这是一个json格式的数据集。




发送请求


分析完了我们上代码

  url = f'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=1842931&score=0&sortType=5&page={page}&pageSize=10&isShadowSku=0&rid=0&fold=1'

    headers = {
        'Cookie''unpl=V2_ZzNtbUYHR0Z0W0RWKUsLV2JREA9LXhcQIFoVB30QC1JnUxUOclRCFnUUR1xnGF4UZwYZXEBcQBRFCEdkeBBVAWMDE1VGZxBFLV0CFSNGF1wjU00zQwBBQHcJFF0uSgwDYgcaDhFTQEJ2XBVQL0oMDDdRFAhyZ0AVRQhHZH4RWwdlBRtaQGdzEkU4dlF8GV4GYzMTbUNnAUEpDEJUehhbSGILFV9AUUoSdzhHZHg%3d; __jdv=76161171|baidu-pinzhuan|t_288551095_baidupinzhuan|cpc|0f3d30c8dba7459bb52f2eb5eba8ac7d_0_5a5b0b33ccfc4c3c88e4dcbb78ff1a6b|1630649001988; __jdu=496337863; areaId=27; PCSYCityID=CN_610000_0_0; shshshfpa=a3671771-e2dd-e5ca-3826-cc6c1253d728-1630649005; shshshfpb=zwlMB6I2rOyoYF14FE0C55C00221B9C479F0871905120BD991A994D4EA9C43A60A4EB5A55AA5EBC0029C3AE2909633951CEB21D44548EE3AD9276B1A650D1D5E938AB485D8708F1E767A8B44503EFA82588A0DE1C83E88CC8F22632DB9EBDB62F76AC5CAD097F2A1F3BAEF3AA4BC32C0956F76DEEA203421F2F95A71D634D205C08D6EE0E8BD6B0FBB114387CE7A39116936C0C32E4D40854ABA3D6780899; _tp=dr8%2BZKvIJSECFYFRRyrDdA%3D%3D; pinId=hX_o7kOWsfSxiEupljIIzQ; shshshfp=166a1d8dfb1b2b55419a4cb0f70894c0; __jda=122270672.496337863.1630649000.1630649000.1630649002.1; __jdc=122270672; token=9ab8d7eb0dbbf4d5c4ddb224b59b3c46,2,905916; __tk=VUoJVxeMWZjCWlfyV0kwVMbOnxjNiUVOixbzRUyDnxG,2,905916; shshshsID=1134730281e295e1469f554a1fe95c59_5_1630649056546; __jdb=122270672.7.496337863|1.1630649002; ipLoc-djd=27-2428-31523-56718; 3AB9D23F7A4B3C9B=IS7P7DMAVM4STNYR6HHL2B2DAETHTEWAQ22DWM4MKQ642L5GPJSZKE6HTB3IAS7O763NIN3SCCAV66ZY5JXZ2SCFV4; jwotest_product=99; JSESSIONID=8971DE7AF521E92FE4AE8A0C4518F6AA.s1',
        'Referer''https://item.jd.com/',
        'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) App, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
        }

     # 获取响应
    resp = requests.get(url, headers=headers)
    ic(resp.text)

结果如下,我们可以看到打印出来的结果不是一个标准的json格式数据集
所以我们先要构造标准的json格式
便于我们后续对数据内容进行提取。



构造方法如下:

json_data = json.loads(resp.text[20:-2])

然后我们获取我们所要的内容,成功打印如下:

    for cmts in json_data['comments']:

        # 昵称
        nickname = cmts['nickname']
        
        # 评分
        score = cmts['score']
        
        # 评论
        comments = cmts['content']
        
        # 产品类型
        product = cmts['productColor']

        # 评论时间
        time = cmts['referenceTime']

        # 评论点赞数
        starVote = cmts['usefulVoteCount']

        # 评论回复数
        cmtsReply = cmts['replyCount']

        print(nickname, score, comments, product, time, starVote, cmtsReply)
        
        '''
        a***1 5 味道很好吃,是正品,活动价比商场实惠,物流迅速,相信自营。。。。。。 美心纸盒流心奶黄360g 2019-08-31 11:25:01 1 0
        g***g 5 口感好,酥酥的,奶香味,孩子喜欢吃,也不会太甜,送人佳品,高大上,自己吃也好吃 美心流心奶黄360g 2020-09-10 15:18:22 0 0
        炎***绯 5 外观非常小,品尝了一下,味道非常香甜,粘粘哒很好吃?,月饼做工质量顶级,就是价格太贵啦,节日送人首选。 美心纸盒流心奶黄360g 2019-08-10 19:30:36 14 0
        ****j 3 平均一块50元,也没多好吃,好吧 美心纸盒流心奶黄360g 2018-09-12 13:52:59 1 0
        R***n 5 京东物流很棒,商家包裹非常好,一盒月饼匹配相当大的纸箱,里面还有防撞气泡塑料,很贴心的。再来说一说这个美心月饼那是好吃的没的说了,价格不菲真是太好吃了 美心流心奶黄360g 2020-09-20 12:36:38 0 0
        x***8 5 官方的说法是用微波炉加热20秒吃,切开就能看到流心。我收到后拆开吃了两个,一个用微波炉加热,一个直接吃。用微波炉加热的那个感觉就是切开来的时候就奶黄已经流淌了。直接吃的那个就像是那种糖心鸡蛋一样,当中一圈是软的。味道很好,一如既往的相信京东,相信美心月饼。 美心纸盒流心奶黄360g 2019-08-27 22:27:17 0 0
        b***5 5 美心月饼很好吃!不太甜,不油腻,味道很好! 美心盛意奶黄月饼270g 2020-09-13 16:35:49 0 0
        b***n 5 真好吃啊,4种口味都试试。去年买的流心的就很好吃,今年又买了饼皮和这个,都挺好吃哒~京东买一是快,二是不会碎,放心多啦! 美心流心四式月饼360g 2020-09-06 21:17:50 1 1
        c***4 5 好吃好吃好吃,连说三遍,收到的一个都没有碎,很好吃,拿微波炉叮一下更好吃,流沙的感觉沙沙的,吃下去回味无穷,京东的快递真的很方便,当天就到了 美心纸盒流心奶黄360g 2019-08-15 14:33:00 7 2
        w***8 5 月饼很好,日期新鲜,送货神速。美心的月饼比较袖珍,味道没的说,流心奶黄更是经典。
        港式月饼比较适合送人,尤其是北方的长辈,吃个新鲜,跟北方的月饼比精致许多。 美心流心奶黄360g 2020-09-18 09:26:37 0 2
        '''


多页爬取


我们有多页爬取的需求就要观察多页来链接的规律从而构造出多页请求的
真实链接。

https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=1842931&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1

https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=1842931&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&rid=0&fold=1

https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=1842931&score=0&sortType=5&page=2&pageSize=10&isShadowSku=0&rid=0&fold=1

https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=1842931&score=0&sortType=5&page=3&pageSize=10&isShadowSku=0&rid=0&fold=1

从以上连接我们可以观察得出控制翻页的就是page参数。
所以我们据此构造出以下链接从而获取多页数据。

https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=1842931&score=0&sortType=5&page={page}&pageSize=10&isShadowSku=0&rid=0&fold=1

我们先来获取前100页数据作为测试如下:



数据存储


存储数据我们使用openpyxl将其存于Excel,便于我们后续的数据清洗、处理和可视化

具体可以参考以下教程:
我是如何把python爬虫获取到的数据写入Excel的?

  ws = op.Workbook()
  wb = ws.create_sheet(index=0)

  wb.cell(row=1, column=1, value='昵称')
  wb.cell(row=1, column=2, value='评分')
  wb.cell(row=1, column=3, value='产品类型')
  wb.cell(row=1, column=4, value='评论时间')
  wb.cell(row=1, column=5, value='评论点赞数')
  wb.cell(row=1, column=6, value='评论回复数')
  wb.cell(row=1, column=7, value='评论内容')
  
  wb.cell(row=count, column=1, value=nickname)
  wb.cell(row=count, column=2, value=score)
  wb.cell(row=count, column=3, value=product)
  wb.cell(row=count, column=4, value=time)
  wb.cell(row=count, column=5, value=starVote)
  wb.cell(row=count, column=6, value=cmtsReply)
  wb.cell(row=count, column=7, value=comments)

  ws.save('月饼.xlsx')

结果如下:



词频展示


数据可视化之前我们先要对数据进行预处理,这里我们使用的是熊猫来处理数据,具体可以参考:
让人无法拒绝的pandas技巧,简单却好用到爆!

我们获取前十个高频词汇以及出现频率动图如下:

('月饼''好吃''美心''味道''包装''不错''喜欢''物流''口感''特别')
(5873112571611481281021009680)




最大值、最小值、均值以及对用词汇展示如下:



词云展示


我们使用stylecloud来绘图,部分代码如下:

有兴趣的笑傲伙伴可以参考:

如何使用python实现一个优雅的词云?(超详细)


  gen_stylecloud(text=result,
                   icon_name='fab fa-apple',
                   font_path='msyh.ttc',
                   background_color='white',
                   output_name=pic,
                   custom_stopwords=stop_words
                   )
    print('词云图绘制成功!')




最畅销口味



从图中看以看出,销量最好的月饼口味是美心流心奶黄
占总销量口味的42.5%

销量较差的口味是盛意奶黄
占不到2%的总销量


月饼口味销量折线图



评论点赞最多


我们使用pandas找出点赞最多的一条评论

        昵称  评分          产品类型                 评论时间  评论点赞数  评论回复数                                               评论内容
111  ****o   5  美心纸盒流心奶黄360g  2019-07-16 19:12:22     68     53  美心月饼不愧是月饼中的劳斯莱斯。包装非常精美。无论送人还是自己吃都是首选。作为网红月饼除了。诱人的卖相,只管味道也没得说。微波炉加热1015秒之后。月饼皮变得软糯香甜。奶香味特别浓郁。甜而不腻,流星至今流入口中。让人回味无穷,特别正宗老香港的味道。值得推荐。


评论内容如下:





情感分析


如果有人问,有没有比较快速简单的方法,快速进行情感分析,那么 SnowNLP 库就是答案。


SnowNLP 主要可以进行中文分词、词性标注、情感分析、文本分类、转换拼音、繁体转简体、提取文本关键词、提取摘要、分割句子、文本相似等。


需要注意的是,用 SnowNLP 进行情感分析,官网指出电商评论的准确率较高,其实是因为它的语料库主要是电商评论数据,但是可以自己构建相关领域语料库,替换单一的电商评论语料,准确率也挺不错的。


安装


pip install snownlp


使用


from snownlp import SnowNLP


情感分析


我们来测试京东月饼点赞最高的的评论数据:

    # 情感分析
    pinglun = u'''
        连续20年香港销售冠军?,没有月饼能在中秋打败它
        首创流心奶黄,是开山鼻祖哦
        100%香港制作,品质数年如一日,稳定的很
        打开流心奶黄月饼礼盒,外观是淡淡的乳黄色,上面印着烫金字“美心流心奶黄”。里面有8枚流心奶黄月饼,一个是45克,个头刚刚好。这种大小就比较适合小仙女和长辈们吃,一个吃下去刚刚好~
        流心月饼最好的吃法,就是微波炉加热5-7秒,亲测7秒最佳,如果放在冰箱里冰过,就热10秒。
        拿出来后,饼皮热乎乎的,软软的,掰开来后,奶黄慢慢流淌出来,闻着好香好诱人!
    '''


    Sentiment_analysis = SnowNLP(pinglun).sentiments
    
    '''
    0.9999999991125585
    '''


SnowNLP 对情感的测试值为 0 到 1,值越大,说明情感倾向越积极。

得到的情感值很高,说明买家对商品比较认可,



下单时间分析



我们先来获取下单的具体年/月/日

在来分析一下老板们喜欢下单的时间可以据此备货等操作


所以我们先要使用pandas提取时间


pd_data = pd.read_excel('./月饼.xlsx')
pd_data['year'] = pd.DatetimeIndex(pd_data['Date']).year
pd_data['month'] = pd.DatetimeIndex(pd_data['Date']).month
pd_data['day'] = pd.DatetimeIndex(pd_data['Date']).day


年销量-折线图



从图可以看出此款月饼销量最好的2020年,有一种逐年递增的感觉


月销量-折线图



从图可以看出此款月饼销量最好的月份是每年的9月,农历的8-15也就是阳历的九月份,这个时候月饼销量是最好的



日销量-折线图



从图可以看出此款月饼销量最好的日期是是16、17号。

可以看出大家下单时间一般集中在周内。

好啦,今天的分享到此结束啦!

- EOF 


浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报