从0开始,教你做数据分析16篇

浏览: 1423

image.png

继续上一篇的内容,上一篇是讲了利用浏览器找到json数据的URL,并把源码获取下来,那么今天要做的事情就是解析这些源码。

解析源码的方法有多种。而且不同的语言自带有不同的包或者类(功能),像Python就有很丰富的包来做这块的工作,简单的一两行代码就可以完成复杂的工作。

今天我们是以VB为例,调试环境可以是VB任意版本、(EXCEL)VBA、VS。

Excel需要打开【开发工具】,可以在我的资料分享网盘里面找一个【代码教程录像】的视频,在视频的前5分钟内有演示。


第一步是观察获取下来的源码(注意:最终获取下来的源码不一定和在浏览器观察的一模一样),还记得上一篇的爬取代码如下

image.png

这是调用了Msxml2.XMLHTTP这个对象,也可以称之为API(接口),是专门给客户端(PC电脑)提供同http服务器通讯的协议。但不是什么服务器都认可这个协议,比如tmll.com(天猫)的服务器就把这个协议拉黑了。

标准格式是:

image.png

其中的【url】是这个模块的唯一变量,也就是说你想谁通讯就改成谁的地址,比如和百度通讯就把【url】改成【www.baidu.com】。

不过,像江湖策、生意参谋等这类站内工具,都需要登录淘宝后才能响应请求并返回数据,在跑这个代码前还需要做一个登录江湖策的模块,类似下图,点击一下Button1,然后调用的浏览器就打开江湖策,然后登录后,再运行上面的代码才会有结果。

image.png

既然要观察,那么,就要把数据先保存下来

image.png

运行后,我们会在D盘里面找到一个【test.txt】的文件,打开文件,所见如下:

image.png

这是一种极其不友好的展现方式。可以用json格式化工具:http://tool.chinaz.com/Tools/JsFormat.aspx

image.png

将源码贴入文本框后,点击格式化,就会自动将这一大串json格式的源码给排列好,这样便于我们观察源码的结构。

我介绍两种方法,一种是字符定位的方法,一种是用类的方法。

首先是第一种方法。

有用过Excel函数的朋友都应该或多或少用过MID函数,比如【广东省深圳市宝安区】这一个字符串,想把“深圳”取出来,就Excel里面输入【=mid("广东省深圳市宝安区",4,2)】,表示从文本串里面第4个字符开始,取出2个长度的字符,可以在Excel里面试一下。

image.png

这是在我们知道“深圳”这个的位置的时候,才可以直接定位到,但如果不知道“深圳”在哪里的时候,甚至不知道“深圳”的长度的时候,比如碰到“石家庄”,这个时候就要想办法让程序自己判断目标数据的其实位置和长度。

这个时候就需要用到【instr】函数了,这个函数不是Excel的公共函数,只能在VBA环境里面使用,作用和【find】函数一样。我们先取出cnt字段的数据,这个数据记录的是json里面的数据量

image.png

【10】这个数据是在冒号和逗号之间,因此先读出前后的字符位置便可。

image.png

应该有很多人不理解为什么后面要加5。因为instr函数找出来的是【c】的位置。【c】到【1】的距离是5个字符

image.png

取出【c】的位置后

+1 可以定位到【n】

+2 可以定位到【t】

+3 可以定位到【"】

+4 可以定位到【:】

+5 可以定位到【1】

mid前面的两个减号(--)是将取出来的字符转换成数字。

运行结果cnt=10,表示我现在爬下来的数据里面有10条访客数据

基于这个原理,我们就可以把里面的数据提取出来。我以locationName(访客地址为例)

image.png

代码如下:

image.png

运行结果:

image.png

特殊说明一下,对for循环的作用不清楚的可以问度娘。chr(34)代表双引号,cells(i,1)代表Excel工作表的第i行,第1列。

如果要提取更多的数据直接在for循环里面添加代码即可。

第二种方法相对比第一种要简单得多。

直接用JSON解析的类来读取数据

这个源码的格式就是JSON文件,结构是这样的:

{"参数字段":"参数",……,"res":[{数据模块1},{数据模块2},……,{数据模块10}]}

一个模块就是一个UV的信息。

我们的目标数据就是数据模块1-10里面的【locationName】字段

首先第一步是导入类文件,可以在我的资料分享盘里面找到【16篇模块】这个文件夹,类模块的文件后缀是【cls】,也可以直接找到【xlsm】文件,这个文件已经导入好类模块,可以直接用office2010或者2013版本调试。

第二步是根据JSON文件的格式,确认数据。

下图,红色框的是第1级,绿色框的是第2级,紫色框的是第3级

image.png

比如,现在要取出cnt的数据,那么格式就是:

JSON("cnt")

而我们的目标数据locationName是在紫色框下的,是第3级,那么格式就是:

JSON("res")(1)("locationName")

用这个方法,代码写起来很清爽。

image.png

dicJSON("res")(i)("locationName")这个写法就是根据文件的格式,直接定位到

{……,"res":[{第i个数据模块里面的locationName字段}]}

每个不同的JSON文件,数据字段的定义都不一样的,在这个文件里面,数据都在【res】字段下面,如果字段名字变了,只要观察一下数据再哪个[](中括号)里面,把第1级字段找出来。

调试文件,登陆自己的江湖策账号,然后分别点击两个按键,观察两种方法的结果。

image.png

【登陆江湖策】按键的代码

image.png

【第一种方法】按键的代码

image.png

【第二种方法】按键的代码

image.png

编程基础的问题,可以度娘一下。度娘是万能的!

推荐 0
本文由 零一老师 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册