作者介绍:

程虹升,唯品会大数据部数据分析师,数据分析和挖掘实战的践行者,“51CEO”公众号的运营者。

声明:

1. 该文章为技术类文章,部分同学可能对代码部分有所不适,可忽略代码(黑色背景),直接看结论部分即可;

2. 本文得出的结论仅供参考,不要过度联想。


最近双11快来了,睡前空闲时会去看看有啥可以买的东西——某个月黑风高的夜晚,突然get到一个主意,如果可以个性化推送各个电商平台的优惠信息——比如我比较喜欢囤书,当有图书优惠活动的时候,能及时通知到我,那是极好的,不用每天都去京东、当当、amazon看一下。

那么:

第一步,及时获取各个网站每天的优惠信息,可以写个爬虫程序每天去各个网站门口侯着,发现打折、满减等优惠活动;

第二步,把优惠信息整理出来后立刻向我汇报(进行推送);

动手写代码的时候,我改主意了——我想看电商平台的历史优惠活动记录,毕竟每天每个平台的的活动就那么几条(都算不上“大”数据啊)。

找来找去,发现只有京东把【优惠活动】记录挂在官网上,如下图所示,这个就是我要抓取的内容。

注:截图来自 https://www.jd.com/moreSubject.aspx

本文分三部分:

1. 数据抓取,即把数据从网站上倒腾下来;

2. 数据清洗,去除不要的行和列,然后把字段内容清理一下;

3. 探索分析,简要看两个问题:

  • 活动的频率如何?是否有季节变化?

  • 活动名称最高频的关键字是啥?

1. 数据抓取

开始数据抓取前,要顺藤摸“数”——找到数据的源头:

  1. 打开目标网页地址(https://www.jd.com/moreSubject.aspx);

  2. 点击第N页使网页跳转,检查下地址栏是否有变化,如果跳转后的新地址出现 page之类可以表示页面的参数,如果有那么就要对新的地址进行分析,这里是没有的,所以要继续操作;

  3. 快捷键F12查看网页信息(Chrome浏览器),切换到Network菜单下,选择XHR(此时里面是空的),然后重复第2步的操作(点击“第N页”),XHR信息一般就会出现(如下图示)。

单击出现的query信息,查看Header,可以知道3个关键信息:

  • 请求的网址,即Request URL

  • 请求方式,常见的是get 或者 post,这里是post

  • 编码方式,常见的编码方式是'utf-8','gbk','gb2312',这里是 utf-8

再切换到Preview,可以看到json格式的数据。

可以看到数据记录应是在'record'里面(展开小三角形可以看到明细数据)。

关键信息到手了,然后需要分析请求网址中参数的含义。

https://www.jd.com/queryNews.html?type=2&title=&page=650&r=0.03990295037602465

其中:

  • page 应该是页面;

  • type 这个估计就是区分是【公告】还是【活动】;

  • r 不知道是啥,可以去掉后把修改后的地址贴浏览器看一下,看数据返回结果有没有变化(经测试,这个参数是可以不要的)

查清楚网页数据的“来龙去脉”之后就可以写代码了,主要思路如下:

1. 先从网址获取html格式的数据(json)格式;

2. 将json格式的数据转化为dataframe;

3. 把每个页面得到的数据进行合并;

干活之前先加载工具包(本文的分析工具为python,Windows7环境)

1. 定义一个函数,该函数实现的功能是将url网址转化为html格式数据

2. 循环迭代网页id,批量抓取数据,并进行整合

2. 数据清洗

数据采集完毕后,需要查看下数据情况:

  • 数量,使用 df_res.shape 命令来查询函数和列数;

  • 质量,使用 df_res.head() 来看下看5行数据;

这里发现有三个问题:

  1. 有三列变量的值貌似都是None,需要删除掉;

  2. 两个变量是日期时间格式,需要改成日期(yyyy-mm-dd)格式;

  3. title列有一些html标签(<font>括住的内容),需要清理掉;

第1步,用 df_res.describe() 命令看下变量描述情况,发现commentvisible, content, share 这三列变量都是None值。

删除列可以使用如下两种方式:

  • df_res = df_res.drop(['commentvisible','content','share'],axis = 1)

  • del df_res['commentvisible']

第2步,把日期时间格式改为 yyyy-mm-dd 日期格式

第3步,去除title列的html标签

因为前面的英文标签和中文标题可以用分隔符“>”来分割,而且一般来说中文标题里面一般不会出现>符号,所以,直接对字符串分割,得到list,然后截取list最后一个值(中文标题在最后)。

经过3步的清洗,得到数据应该是如下样式了

注意到前面的变量描述结果,unique小于count则说明数据存在重复,这里考虑【活动上线日期time,活动名称title】是不重复的就行,后面的统计分析也主要是基于这两列。

3. 探索分析

探索分析主要看两个问题:

  • 每年、季度的活动频率如何?

  • 活动中最高频的关键字是啥?

先计算日期衍生的变量——活动的年、季、月。

得到的数据格式如下

按年对活动计数,看活动频率

结果如下

说明:

1. 活动数量在2010年后数量较多,后续的分析也主要考虑2010年后;

2. 13年14年是活动高峰期,这个可能和京东上市有关(京东于2014年5月上市)。

分析季度活动波动情况

这里定义一个分组柱状图的作图函数groupbar (https://github.com/hscheng/python)。

作图结果如下(并没有发现什么季节规律啊)

接下来看活动标题中出现的最高频的关键词,思路如下:

  1. 先用jieba来分词;

  2. 剔除分词结果中不需要的标点符号等;

  3. 统计每个关键词的频率;

  4. 使用wordcloud包来做词云图;

1.分词

2.清洗

3.计数

4.作图

接下来就是见证奇迹的时刻了!

可以得到两点结论:

  1. 满减、折扣是优惠活动的主要形式,实实在在的优惠更能打动消费者啊;

  2. 空调、手机、电视是出现频率最高的品类,这三个品类不仅居家必备,而且单价都比较高。

以上是网络爬虫的简要分享,欢迎留言讨论。

附:

本文完整代码笔记(html版)见 https://github.com/hscheng/python

网络爬虫-京东优惠活动数据分析相关推荐

  1. 网络爬虫 | 京东全站数据采集(类目、店铺、商品、评论)——基于Python中Scrapy框架

    目录 1.定义采集数据的存储结构 2.定义管道文件 3.定义中间件文件 4.scrapy爬虫设置文件修改 5.商品类目抓取 6.商品信息抓取 7.店铺信息抓取 8.评论信息抓取 9.抓取过程 10.基 ...

  2. 基于网络爬虫的大学生就业数据分析与预测模型研究

  3. python网络爬虫的第三方库_Python常用第三方库_网络爬虫、数据分析与WEB开发、机器学习...

    Python语言有超过12万个第三方库,覆盖信息技术几乎所有领域.下面简单介绍下网络爬虫.自动化.数据分析与可视化.WEB开发.机器学习和其他常用的一些第三方库,如果有你感兴趣的库,不妨去试试它的功能 ...

  4. Python 网络爬虫:Selenium 好买基金网

    更多商业数据分析案例(原理,完整代码,数据集).统计学.SQL.网络爬虫详见公众号 " 数据分析与商业实践 " 引言   网络爬虫应用十分广泛,本篇针对金融领域,目的为根据用户输入 ...

  5. 网络爬虫笔记4,信息提取之Re库

    每页44个商品 通过对例子的分析,我们得到了搜索接口和翻页的URL对应属性 / import requests import redef getHTMLText(url):try:r = reques ...

  6. 网络爬虫,python和数据分析学习--part1

    # -- coding: utf-8 -- """ Created on Tue Oct 10 08:38:20 2017 本段程序为科大王澎老师<网络爬虫,pyt ...

  7. 网络爬虫,python和数据分析学习--part2

    Created on Tue Oct 10 10:47:31 2017 本段程序为科大王澎老师<网络爬虫,python和数据分析>中P15,针对spyder3做了微调 主要任务:实现了自动 ...

  8. python网络爬虫第三方库_Python常用第三方库大盘点

    Python语言有超过12万个第三方库,覆盖信息技术几乎所有领域.下面简单介绍下网络爬虫.自动化.数据分析与可视化.WEB开发.机器学习和其他常用的一些第三方库,如果有你感兴趣的库,不妨去试试它的功能 ...

  9. 《Python3网络爬虫开发实战》第二波抽奖赠书活动来了!

    嗨~ 给大家重磅推荐一本书!上市两月就已经重印 4 次的 Python 爬虫书!它就是由静觅博客博主崔庆才所作的<Python3网络爬虫开发实战>!!!同时文末还有抽奖赠书活动,不容错过! ...

最新文章

  1. 【网络知识点】防火墙主备冗余技术
  2. 安卓入门系列-02创建一个项目
  3. linux运维学了又忘记,Linux运维工程师经常忘记的10个实用Linux命令
  4. JS 给某个对象添加专属方法
  5. android remote shell,关于 Appium V1.7.2 新增的唯一安卓可执行 mobile 命令 shell 的疑问...
  6. 蓝桥杯 ADV-108算法提高 分数统计
  7. 【开源】微信小程序、小游戏以及 Web 通用 Canvas 渲染引擎 - Cax
  8. 白杨SEO:关键词定位与兴趣定位是什么?这两类推广渠道在网络营销上有什么差异?
  9. cpc安装 mysql_专利电子申请客户端(CPC软件)
  10. 数学计算机学具制作,小学五年级数学学具怎么?
  11. 鸿蒙系统可以安装当贝市场吗,荣耀智慧屏安装软件全攻略,新手党必备!当贝市场推荐...
  12. WallpaperEngine壁纸提取工具,pkg文件提取静态图片,pkg文件转jpg,pkg文件转png
  13. 宋体小四在手机上是几号_word文档4号宋体 word宋体小四是几号字
  14. CentOS8设置网络安装源
  15. 一学校出150名在校“老板”
  16. 直接创建框架协议、合同
  17. 海马玩模拟器 修改host(让hosts生效)
  18. 如何给运行中的docker容器增加映射端口
  19. 【漆天编程】MT4和MT5有什么区别?这是我见到过的最好的回答
  20. 今日头条---后台开发笔试题

热门文章

  1. java实现天气预报
  2. 如何把二维码引入固定资产管理?
  3. Java爬去教务系统后怎么发布_java实现-强智教务系统API文档-课程信息
  4. 苹果cms模板_苹果cms怎么做seo?
  5. 一学校出150名在校“老板”
  6. SAI创始人谈美股IPO:做清洁算力领域“特斯拉” 减少碳排放
  7. chrome的APP模式与全屏模式 --app --kiosk
  8. android解析包时出现问题怎么解决方法,安装APK软件时发生“解析包时出现错误”的9大解决方法...
  9. qt中toLocal8Bit和toUtf8()有什么区别
  10. Excel中如何显示复杂公式中局部的计算结果,例如嵌套函数,使用多个函数