最近一段时间主要重心在Amazon电商数据分析上,这是一个偏数据分析和可视化的项目。具体来说就是先获取Amazon的商品数据,数据清洗和持久化存储后作为我们自己的数据源。分析模块和可视化模块基于数据进行一系列的操作。

  显然,整个项目中最基本,也是最重要的就是前期数据的获取,本篇文章就是针对数据获取和清洗过程进行一个简单的介绍和总结。

  整个项目我们采用了Python作为开发语言,其中可视化模块基于Django搭建,当然在数据获取,即爬虫模块,我们也是采用了Python作为我们的开发语言。

   对于爬虫模块,因为需求是确定的,并且爬取站点也是固定的——Amazon.com,因此在爬虫模块主要需要考虑的是调度问题、页面解析问题以及流程自动化的问题。

  首先说明一下爬虫的整体架构,一开始我们是采用单机器爬取,启动方式也很简单——命令行启动,但这样带来的问题是显著的,不稳定,需要手动启动任务。之后我们将爬虫部署成服务,对于进入的任务,可能是用户提交的,也可能是我们内部提交的,通过一个提交系统加入到服务队列中,之后爬虫服务检测并启动爬取任务。这样一定程度上解决了不稳定的问题,但随着数据增长,带宽等因素凸显出来,因此,我们又加入一些机器,构建一个小型的爬虫集群来分布式爬取。但这不算是真正意义上的分布式,并没有节点

  具体实现方面我们采用Python的一个开源爬虫框架——Scrapy,该框架提供了基本的调度、页面爬取等功能。我们需要做的是基于该框架设定DOM解析方案和后续数据的处理存储方案,同时基于该框架搭建一个小型的伪分布式爬取系统。

  下面来介绍一下我们在爬虫设计过程需要考虑的几个问题。

  首先页面解析问题,因为JS异步加载的原因,爬虫实际得到的页面DOM元素和我们在浏览器中打开页面得到的DOM元素有点区别,这就不能完全依靠浏览器来定位具体的DOM元素。其次,在访问达到一定次数,特别是并发访问请求达到一定次数后,Amazon会对请求进行封杀,返回Robot Check页面甚至是500 Server Error。针对这种情况,一种解决方案是减少并发请求的数目,根据我们实际测试发现,每秒钟发送的请求如果超过50条会被Amazon返回500 Server Error(可能现在Amazon会不断更新策略),因此我们设置了并发请求数为32,即一秒钟一台机器发送32个请求。对于可能会有Robot Check的情况,这个我们还在探索阶段,因为此类页面出现较少且集中出现在商品信息页面,而该页面由于信息比较固定可以较长时间不更新。目前是加入Proxy作为下载中间件(DownloadMiddleware)。另外考虑到可能因为国内访问过于频繁的话也会导致此类问题的出现,我们目前正在将爬虫迁移到Amazon EC2上,一来比较稳定,另外访问也会比在国内机器上快点。

  其次是调度问题。在单机器单任务的爬虫中不存在这样的问题。但是在多机器多任务中这是一个比较重要的问题,多个任务提交后怎么进行调度,如果有优先级的话是按照优先级来,否则是默认放在任务队列里依次进行。在我们的爬虫系统中,多台机器组成的爬虫系统是由一个调度控制,当一个爬取任务提交后,调度将任务拆分并分发到不同的爬虫机器上,在单个的爬虫机器上,会有一个爬取队列,队列中是分发到该机器上的所有爬取子任务,在目前是默认从队列中依次获取任务,一台机器上能同时启动六个爬取任务进行并行爬取。

  最后是流程的自动化问题。在我们的系统中,需要实现任务提交后,在网站上直接看到处理后的数据以可视化图表展现。这就需要将整个流程实现自动化,提交任务后开始爬取数据,爬取任务完成后对数据进行处理和归并,生成一些统计信息,最终得到规范化的数据并在前端可视化展示。这一系列过程主要分为两个阶段,爬取和处理,爬取阶段任务提交分发后爬虫会启动爬取任务,在爬取完成后,利用Scrapy的接口实现了对爬取任务状态的修改,例如对于一个任务T,启动时在数据库中加入状态,{‘name’: T, ‘jobid’: ‘Task_id’, ‘status’: ‘running’},在爬取完成后,修改状态为 finished,同时,会有定时脚本轮询看数据库中各任务是否完成。如果完成的话,启动数据处理的流程。数据处理完成后归并数据到正式的项目数据库中,完成数据的前端可视化展现。由于本项目部署在Linux服务器上,因此就直接采用了linux下的cronjob来实现了脚本的轮询和执行。简单来说,写入几个crontab后,启动cronjob,这几个脚本串接了上述说的每个流程,使其成为完整的一套流程。

  上述说的是数据爬取过程中的几个主要问题,也是比较重要的问题,说实话,即便是现在的系统,仍然没有完美解决这几个问题,解析依然会遇到Amazon的封杀,自动化的鲁棒性太弱等等。这可能是下一阶段需要考虑的问题,同时,数据爬取存储后依然有不少脏数据(Dirty Data),需要进一步的清洗。

Amazon电商数据分析——数据获取的更多相关文章

  1. [原创]如何利用BI搭建电商数据分析平台

    某电商是某大型服装集团下的重要销售平台.2015 年,该集团品牌价值达数百亿元,产品质量.市场占有率.出口创汇.销售收入连年居全国绒纺行业第一,在中国有终端店3000多家,零售额80 亿.其羊绒制品年 ...

  2. 如何利用BI搭建电商数据分析平台

    某电商是某大型服装集团下的重要销售平台.2015 年,该集团品牌价值达数百亿元,产品质量.市场占有率.出口创汇.销售收入连年居全国绒纺行业第一,在中国有终端店3000多家,零售额80 亿.其羊绒制品年 ...

  3. 基于spark和flink的电商数据分析项目

    目录 业务需求 业务数据源 用户访问Session分析 Session聚合统计 Session分层抽样 Top10热门品类 Top10活跃Session 页面单跳转化率分析 各区域热门商品统计分析 广 ...

  4. 电商打折套路分析 —— Python数据分析练习

    电商打折套路分析 ——2016天猫双十一美妆数据分析 数据简介 此次分析的数据来自于城市数据团对2016年双11天猫数据的采集和整理,原始数据为.xlsx格式 包括update_time/id/tit ...

  5. CRMEB系统就是集客户关系管理+营销电商系统,能够真正帮助企业基于微信公众号、小程序实现会员管理、数据分析,精准营销的电子商务管理系统。可满足企业新零售、批发、分销、等各种业务需求。

    **可以快速二次开发的开源小程序商城系统源码**源码开源地址:https://github.crmeb.net/u/LXT 项目介绍: CRMEB系统就是集客户关系管理+营销电商系统,能够真正帮助企业 ...

  6. mysql-kettle-superset电商可视化数据分析

    1.项目概述 需求 对电商业务中的用户.商品.订单的数据进行分析,观察运营的情况 架构 业务数据库:Mysql:存储最原始的数据 ETL:Kettle 数据仓库:Mysql:存储需要进行分析处理的数据 ...

  7. 谈B2B电商平台与大数据

    数据为王,服务为本——谈B2B电商平台与大数据 2013-06-27 11:10:41 作者:B2B行业资讯 标签:                             大数据           ...

  8. 【Tableau】电商广告投放的地域分析

    分析师的职责是利用处理数据获取信息,提炼规律,帮助企业正确决策业务方向. 所以,一个好的分析师绝不能被数据所困,既要深入业务,理解业务,也要高瞻远瞩,以领导者的思维借助数据分析的辅助做出判断. [结构 ...

  9. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

随机推荐

  1. Java 8新特性之 Nashorn(八恶人-6)

    Joe Gage 盖奇·乔 “First time in my life I made a pretty penny.And, figured I'd come home and spend time ...

  2. MT【168】还是两根法

    设二次函数$f(x)=ax^2+bx+c(a>0)$,方程$f(x)=x$的两根$x_1,x_2$满足$0<x_1<x_2<\dfrac{1}{a}$,(Ⅰ)当$x\in(0, ...

  3. 【枚举Day1】20170529-2枚举算法专题练习 题解

    题目: http://www.cnblogs.com/ljc20020730/p/6918328.html 评测器:cena 评测记录: 1.OneMoreRectangle 一个矩形 ●如果任意枚举 ...

  4. 利用EF和C#泛型实现通用分页查询

    利用EF和C#泛型实现通用分页查询       Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (ORM) 解决方案,是微软的ORM框架.此框架将数据库中的 ...

  5. IOI2018题解

    只有部分题解 练习赛 T2 自然还是要简单考虑了 0~n-1的排列,考虑相对的大小 我们先考虑对于前三个:a,b,c 询问a,b,询问b,c,再询问a,b,c 发现,如果三个知道两个,那么第三个可以唯 ...

  6. CF1027E Inverse Coloring

    题意:n × n的矩阵,每个位置可以被染成黑/白色. 一种gay的染色是任意相邻两行的元素,每两个要么都相同,要么都不同.列同理. 一种gaygay的染色是一种gay的染色,其中没有哪个颜色的子矩阵大 ...

  7. 《剑指offer》— JavaScript(30)连续子数组的最大和

    连续子数组的最大和 题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好 ...

  8. ASP.NET MVC 此安装不支持该项目类型解决方法

    http://www.cnblogs.com/younggun/archive/2011/03/03/1969498.html ASP.NET MVC  此安装不支持该项目类型解决方法 打开 .csp ...

  9. [Java] Servlet工作原理之二:Session与Cookie

    (未完成) 一.Cookie与Session的使用简介 1 Cookie Cookie 用于记录用户在一段时间内的行为,它有两个版本:Version 0 和 Version 1,分别对应两种响应头 S ...

  10. JAVA记录-JSP内容

    JSP(JavaServer Pages )是什么? JavaServer Pages(JSP)是一种支持动态内容开发的网页技术它可以帮助开发人员通过利用特殊的JSP标签,其中大部分以<%开始并 ...