一、背景
公司业务跟一个电商平台有合作,经常在这个平台上销售商品,并且单量不小,客服和财务都经常需要实时了解销售情况,因此经常需要对平台上的销售数据进行统计。
正常的操作模式是:由我们的客服人员或者运营人员登录后台,到商品库找到某个时间段内的商品,然后再去订单列表搜索这个商品所有的订单,并排除退款/取消的订单,最终得出有效订单数量进行统计。
如此一来,随着商品越来越多,统计的难度也会越来越大,并且统计一次花费的时间太多,而该平台又没有提供到我们想要的统计功能(还未完善),因此为了能节省统计人员的时间,释放这部分的劳动力,便着手研究php爬虫对这部分数据进行爬取。
二、爬虫
1、简单页面的爬取只需要模拟简单的访问即可,这类页面只需要关注页面结构,对页面结构进行解析。
2、如果解析的页面是由js/ajax渲染生成的,那么这种情况就会比上面所说的简单爬取要复杂一些。这个时候需要使用Chrome这类浏览器对network请求进行解析。分析页面与接口之间的http请求和生成数据的全过程,再根据具体的请求逻辑来实现对应的爬虫代码。
3、还有一些网站的数据爬取需要登录操作,比如这次抓取是在对方的商城管理系统进行抓取。如果不登陆后台,请求会一直被拒绝。因此对于这类情景,我们要进行模拟登陆。
4、还有一些业务场景更复杂的这边不涉及就不提了。比如有些爬取需要使用代理服务器,否则无法访问到目标url。也有很多情景当数据量剧增时需要考虑拓展性、IO或者多线程的时候,可能php就不太适用了。
三、框架
众所周知,php是世界上最好的语言,爬虫这种小事肯定是难不倒php的,php有自己的爬虫框架。比较知名的比如phpspider。一开始也有考虑使用phpspider,下载下来研究了一会,直接使用框架觉得自己没办法了解具体的过程,又不太想要去仔细查看框架的代码,所以还是决定自己写代码去爬取,不使用框架,这样也可以自己实现爬虫代码。如果有小伙伴想直接使用框架,看起来比较高大上的,可以使用phpspider,看起来还不错。下载地址百度一下就有了。
四、实现
1、先来看一下我们需要爬取的页面
这个页面是商品库的页面,其中总销量和可售库存是我们关心的
这个页面是具体的订单列表页面,我们进行统计的时候需要把退款/取消的情况给统计出来。平台并未提供导出表格和统计的功能,因此我们需要对这两个页面进行爬取,并运算统计出最终表单。
2、f12查看
在开发者工具下我们看到了这样的一条请求
点击进来,这个数据就是我们要的。由此我们可知,该页面的数据是由ajax请求数据渲染而来的。
这是请求时提交的数据,经过分析,得出了这样四个参数:
start:起始商品,设置为0即可
length:获取个数
page:当前页码
type:类型,设置1为我所需的物品类型
这些几个参数经过测试为必要参数,只需要传这4个参数即可获得我想要的数据
3、模拟登陆
在进行2步骤的时候,我们已经遇到登陆的问题,因此我们需要模拟登陆,否则无法获得数据
随便输入数字
获取到了参数和访问地址,因此我们构造一个Post请求携带正确的账号密码来访问这个地址
返回报文里面找到PHPSESSID参数(很重要!!),保存起来,后面的访问都需要设置这个参数,你的模拟登陆才算成功!!!
登陆完以后,还需要选择一个企业进行登陆,点击
发现他进行了一次跳转
分析这一次跳转,请求报文的cookie里面看到了一个很熟悉的参数,刚才我们登陆时候获得PHPSESSID。
4、编写代码获得第一个页面的数据
这是我们获取到的数据,返回的是json数据,我们只需要简单的处理即可
生成简单的报表。其他的数据获取方法同理,要生成文件表格只需要再引入PHPExcel就行,不做赘述
五、总结
1、首先我们需要先模拟登陆,登陆的时候我们使用post去访问地址,携带帐号和密码。
2、在返回的报文里面,我们需要对需要的参数进行保存。
3、请求的时候设置PHPSESSID,这样子后端才能默认我们已经登录。至于PHPSESSID是什么,我们可以认为PHPSESSID是用户的“身份证”,只有携带了这个“身份证”服务器才知道你是谁。
4、接着我们只需要分析具体所需的接口,分析参数,进行模拟访问,然后通过返回数据进行统计即可。
转载:https://blog.csdn.net/csdn317797805/article/details/101694042