php爬虫模拟登陆爬取数据全过程 - Go语言中文社区

php爬虫模拟登陆爬取数据全过程


一、背景

公司业务跟一个电商平台有合作,经常在这个平台上销售商品,并且单量不小,客服和财务都经常需要实时了解销售情况,因此经常需要对平台上的销售数据进行统计。
正常的操作模式是:由我们的客服人员或者运营人员登录后台,到商品库找到某个时间段内的商品,然后再去订单列表搜索这个商品所有的订单,并排除退款/取消的订单,最终得出有效订单数量进行统计。
如此一来,随着商品越来越多,统计的难度也会越来越大,并且统计一次花费的时间太多,而该平台又没有提供到我们想要的统计功能(还未完善),因此为了能节省统计人员的时间,释放这部分的劳动力,便着手研究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、接着我们只需要分析具体所需的接口,分析参数,进行模拟访问,然后通过返回数据进行统计即可。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/csdn317797805/article/details/101694042
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢