解析源码的方法有多种。而且不同的语言自带有不同的包或者类(功能),像Python就有很丰富的包来做这块的工作,简单的一两行代码就可以完成复杂的工作。
今天我们是以VB为例,调试环境可以是VB任意版本、(Execl)VBA、VS。
Excel需要打开【开发工具】,可以在我的资料分享网盘里面找一个【代码教程录像】的视频,在视频的前5分钟内有演示。
第一步是观察获取下来的源码(注意:最终获取下来的源码不一定和在浏览器观察的一模一样),还记得上一篇的爬取代码如下
这是调用了Msxml2.XMLHTTP这个对象,也可以称之为API(接口),是专门给客户端(PC电脑)提供同http服务器通讯的协议。但不是什么服务器都认可这个协议,比如tmll.com(天猫)的服务器就把这个协议拉黑了。
标准格式是:
其中的【url】是这个模块的唯一变量,也就是说你想谁通讯就改成谁的地址,比如和百度通讯就把【url】改成【www.baidu.com】。
不过,像生e经、生意参谋等这类站内工具,都需要登录淘宝后才能响应请求并返回数据,在跑这个代码前还需要做一个登录江湖策的模块,类似下图,点击一下Button1,然后调用的浏览器就打开江湖策,然后登录后,再运行上面的代码才会有结果。
既然要观察,那么,就要把数据先保存下来
运行后,我们会在D盘里面找到一个【test.txt】的文件,打开文件,所见如下:
这是一种极其不友好的展现方式。可以用json格式化工具:http://tool.chinaz.com/Tools/JsFormat.aspx
将源码贴入文本框后,点击格式化,就会自动将这一大串json格式的源码给排列好,这样便于我们观察源码的结构。
我介绍两种方法,一种是字符定位的方法,一种是用类的方法。
首先是第一种方法。
有用过Excel函数的朋友都应该或多或少用过MID函数,比如【广东省深圳市宝安区】这一个字符串,想把“深圳”取出来,就Excel里面输入【=mid("广东省深圳市宝安区",4,2)】,表示从文本串里面第4个字符开始,取出2个长度的字符,可以在Excel里面试一下。
这是在我们知道“深圳”这个的位置的时候,才可以直接定位到,但如果不知道“深圳”在哪里的时候,甚至不知道“深圳”的长度的时候,比如碰到“石家庄”,这个时候就要想办法让程序自己判断目标数据的其实位置和长度。
这个时候就需要用到【instr】函数了,这个函数不是Excel的公共函数,只能在VBA环境里面使用,作用和【find】函数一样。我们先取出cnt字段的数据,这个数据记录的是json里面的数据量
【10】这个数据是在冒号和逗号之间,因此先读出前后的字符位置便可。
应该有很多人不理解为什么后面要加5。因为instr函数找出来的是【c】的位置。【c】到【1】的距离是5个字符
取出【c】的位置后
+1 可以定位到【n】
+2 可以定位到【t】
+3 可以定位到【"】
+4 可以定位到【:】
+5 可以定位到【1】
mid前面的两个减号(--)是将取出来的字符转换成数字。
运行结果cnt=10,表示我现在爬下来的数据里面有10条访客数据
基于这个原理,我们就可以把里面的数据提取出来。我以locationName(访客地址为例)
代码如下:
运行结果:
特殊说明一下,对for循环的作用不清楚的可以问度娘。chr(34)代表双引号,cells(i,1)代表Excel工作表的第i行,第1列。
如果要提取更多的数据直接在for循环里面添加代码即可。
第二种方法相对比第一种要简单得多。
直接用JSON解析的类来读取数据
这个源码的格式就是JSON文件,结构是这样的:
{"参数字段":"参数",……,"res":[{数据模块1},{数据模块2},……,{数据模块10}]}
一个模块就是一个UV的信息。
我们的目标数据就是数据模块1-10里面的【locationName】字段
首先第一步是导入类文件,可以在我的资料分享盘里面找到【16篇模块】这个文件夹,类模块的文件后缀是【cls】,也可以直接找到【xlsm】文件,这个文件已经导入好类模块,可以直接用office2013或者2016版本调试。
第二步是根据JSON文件的格式,确认数据。
下图,红色框的是第1级,绿色框的是第2级,紫色框的是第3级
比如,现在要取出cnt的数据,那么格式就是:
JSON("cnt")
而我们的目标数据locationName是在紫色框下的,是第3级,那么格式就是:
JSON("res")(1)("locationName")
用这个方法,代码写起来很清爽。
dicJSON("res")(i)("locationName")这个写法就是根据文件的格式,直接定位到
{……,"res":[{第i个数据模块里面的locationName字段}]}
每个不同的JSON文件,数据字段的定义都不一样的,在这个文件里面,数据都在【res】字段下面,如果字段名字变了,只要观察一下数据再哪个[](中括号)里面,把第1级字段找出来。
调试文件,登陆自己的江湖策账号,然后分别点击两个按键,观察两种方法的
结果。
【登陆江湖策】按键的代码
【第一种方法】按键的代码
【第二种方法】按键的代码
编程基础的问题,可以度娘一下。度娘是万能的!