ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: liucqa

[分享] 【网页采集教程】【高级篇】第二课-使用VBA解析JSON格式的网页

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-5 09:19 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
liucqa 发表于 2012-11-5 09:02
你看看能否解决我在5楼提出的问题---直接从JS里面得到"1x2"属性数组的方法。

在VBA里面使用JS代码,对 ...

其他常规对象的抓取,我都会了,惟独这种脚本型网页的抓取还不会,应该是高级的了

TA的精华主题

TA的得分主题

发表于 2012-11-5 09:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 引子玄 于 2012-11-5 10:10 编辑

一点思考:对于脚本型JSON网页的抓取,用XMLHTTP也是可以抓取的,可能复杂麻烦点。
举一个例子:

比如说抓取JSON网页http://1x2.bet007.com/oddslist/760181.htm中的各个公司的很多的走势页面地址中的ID编号,如果你是通过点鼠标右键查看“源文件”,是找不到ID编号的,但是通过IE浏览器按F12,得到的“源文件”,是可以找到各个分页地址的ID编号的。比如第1个分页10BET公司的id=26621160。
还有通过IE浏览器的POST行为,在服务器上也可以找到JS脚本文件,里面就有各个公司走势分页面的ID链接编号集合,稍用数组一处理就抓到了。
解决了JSON网页的关键DD——URL参数(ID编号),其他问题就迎刃而解了。

关于JSON网页的抓取,俺以前基本上是通过上面提到的这种办法解决的。
JSON网页和常规网页抓取的不同地方,无非就是多了一道SCRIPT脚本文件的处理提取而已。


TA的精华主题

TA的得分主题

发表于 2012-11-7 18:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-11-7 18:02 | 显示全部楼层
再补一个

当然用java处理JSON非常方便。
但用VBA处理,比较麻烦,举个例子实现读取 [{"fuck":"yes"},{"who":"C","detail":{"first":"crl","address":"drs"}}]  中的yes 和crl

同样的功能,
用java(保存成 XXX.JS 文件):
var ss = [{"fuck":"yes"},{"who":"C","detail":{"first":"crl","address":"drs"}}];
WScript.Echo(ss[0].fuck);
WScript.Echo(ss[1].detail.first);

用VBA:
Sub FUCKC2()
   'aa = Cells(1, 1).Value
        aa = "[{""" & "fuck""" & ":""" & "yes""" & "},{""" & "who""" & ":""" & "C""" & ",""" & "detail""" & ":{""" & "first""" & ":""" & "crl""" & ",""" & "address""" & ":""" & "drs""" & "}}]"
        Set objJs = CreateObject("MSScriptControl.ScriptControl")
        objJs.Language = "javascript"

         func = "function j(s,i) {return eval('(' + s + '[' + i + '])');}"
         objJs.AddCode func

         Set x = objJs.CodeObject.j(aa, 0)
          Debug.Print x.fuck
         Set y = objJs.CodeObject.j(aa, 1)
          Debug.Print y.detail.first
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-11-10 12:28 | 显示全部楼层
本帖最后由 引子玄 于 2012-11-10 12:31 编辑
liucqa 发表于 2012-11-4 22:08
顺便说一下JSON和XML的比较

  ◆可读性


"如果JSON中存储Javascript复合对象,而且不知道其结构的话,我相信很多程序员也一样是哭着解析JSON的。"

————由此可见,ScriptControl对象抓取,在所有网抓中,足见是最难的。得好好学习、摸索和实践。

TA的精华主题

TA的得分主题

发表于 2012-11-10 12:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 引子玄 于 2012-11-10 12:47 编辑
kangatang 发表于 2012-11-7 18:02
再补一个

当然用java处理JSON非常方便。


对这种通过WEB生成浏览文件的处理与抓取,kangatang你在这方面是强项,以前就拜读过你在这方面的网抓代码,厉害。

"用java处理JSON非常方便。
但用VBA处理,比较麻烦."

——学习你的好方法,让浏览器自动化为我们网抓分担工作负荷,以突破脚本控制型网页抓取的困难,化难为易。毕竟用这个工具那个工具,又是转码,又是啥的,挺麻烦的。

TA的精华主题

TA的得分主题

发表于 2012-11-12 11:41 | 显示全部楼层
kangatang 发表于 2012-11-7 18:02
再补一个

当然用java处理JSON非常方便。

这个段子有点黄,我承认。

TA的精华主题

TA的得分主题

发表于 2012-11-28 17:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-12-1 17:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
日后再说,谢谢分享

TA的精华主题

TA的得分主题

发表于 2012-12-16 22:43 | 显示全部楼层
liucqa 发表于 2012-11-4 22:11
通过在VBA中使用上面的JS语句,我们可以得到简单的JSON文本数据。
然而,在实际应用中,上述语句会出现许多 ...

5楼的那张jason数据结构图用什么工具做的?恳请指点一下。谢谢。

点评

5楼图片应该是直接在vbe的监视窗口看的  发表于 2012-12-16 23:26
fiddler2抓包看的,这个工具支持JSON视图  发表于 2012-12-16 22:48
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 02:55 , Processed in 0.044956 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表