ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 不懂html也来学网抓(xmlhttp/winhttp+fiddler)

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-27 18:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:网页交互
onlycxb 发表于 2014-10-22 08:25
作业2、网站:http://www.caac.gov.cn/S1/GNCX/,     操作:点击“查询”,获取航班信息数据。'顺便把航 ...

你这个航班价位信息不全啊,机票价格,只有一个,还是重复的,别的价位都没抓出来

TA的精华主题

TA的得分主题

发表于 2014-10-27 18:53 | 显示全部楼层
renahu 发表于 2014-10-27 18:18
你这个航班价位信息不全啊,机票价格,只有一个,还是重复的,别的价位都没抓出来

所有代码均只是示例而已,只演示抓取代码主要方法。如需实际使用仍需要进一步处理。

TA的精华主题

TA的得分主题

发表于 2014-10-27 18:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
onlycxb 发表于 2014-10-27 18:53
所有代码均只是示例而已,只演示抓取代码主要方法。如需实际使用仍需要进一步处理。


但那些数据的提取恰恰是难点,老师您要有空再给细化一下吧,想看到做得比较漂亮的例题

TA的精华主题

TA的得分主题

发表于 2014-10-27 19:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
onlycxb 发表于 2014-10-27 18:53
所有代码均只是示例而已,只演示抓取代码主要方法。如需实际使用仍需要进一步处理。

关于这个作业,我学到两种方法,一个是您的,另一个是suwenkai的,suwenka老师的作品数据还是很全的,我想知道您用的这个方法,如何能提取出完整的数据,想掌握这种方法

TA的精华主题

TA的得分主题

发表于 2014-10-27 19:06 | 显示全部楼层
renahu 发表于 2014-10-27 18:59
但那些数据的提取恰恰是难点,老师您要有空再给细化一下吧,想看到做得比较漂亮的例题

捕获.PNG 哪有重复的?

TA的精华主题

TA的得分主题

发表于 2014-10-27 19:11 | 显示全部楼层
本帖最后由 renahu 于 2014-10-27 19:33 编辑
onlycxb 发表于 2014-10-27 19:06
哪有重复的?


第一个都是,如:570,570;680,680;后面还有缺的,价位不全,是 menu_content_small2后面的价位

TA的精华主题

TA的得分主题

发表于 2014-10-27 19:47 | 显示全部楼层
本帖最后由 bluexuemei 于 2014-10-28 09:46 编辑

分析JSON,RUBY最简洁
  1. Sub Test1() '需要安装ACTIVERUBY ,下载地址 http://www.artonx.org/data/asr/Ruby-2.1.1.msi
  2.     Const strJSON As String = "[{""name"":""甲"",""age"":36,""children"":[{""name"":""甲儿"",""age"":10},{""name"":""甲女"",""age"":7}]},{""name"":""乙"",""age"":28,""children"":[{""name"":""乙女"",""age"":6}]}]"
  3.     Dim arr
  4.     Set ojs = CreateObject("scriptcontrol"): ojs.Language = "rubyscript"
  5.     arr = ojs.eval("require 'json';h=JSON.parse('" & strJSON & "');h.flat_map{|x|a=x.to_a[0..1].map(&:last);[a].product(x.to_a[2][1].map{|k|k.map(&:last)}).map(&:flatten)}")
  6.     [a2].Resize(UBound(arr) + 1, UBound(arr, 2) + 1) = arr
  7.     Set ojs = Nothing
  8.     'Stop
  9. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-10-27 20:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 renahu 于 2014-10-27 22:35 编辑
onlycxb 发表于 2014-10-27 19:06
哪有重复的?

我在suwfkai老师的作品上做了点修改,加了去重功能,数据也更完整了
航班信息.rar (32.44 KB, 下载次数: 113)

TA的精华主题

TA的得分主题

发表于 2014-10-27 21:08 | 显示全部楼层
本帖最后由 xmyjk 于 2014-10-27 21:17 编辑
wcymiss 发表于 2014-10-27 14:05
JSON转换成vba对象

1、JSON数组在vba内需要用For Each来获取其元素:

我是一直用JS自身来解析JSON,借花献佛,献丑一个脚本。不想用.JS文件,可以把下面代码拷进工作表。
可以讲这个解析库解出来的数据放进一个字典,就可以很方便的索引数据了。
可以试看看最后的附件。
  1. var js = -1,gjz =[],jz = [],sgjz,sjz;
  2. function json2arr(oj,lj){
  3.   if(js==-1)
  4.   {
  5.      js++;
  6.      oj = x;
  7.      lj = '';
  8.      gjz[js] = 'x';
  9.      switch (Object.prototype.toString.call(x))
  10.      {
  11.          case '[object Array]':
  12.                jz[js] = 'x是一个' + x.length + '个元素的数组';
  13.                break;
  14.          case '[object Object]':
  15.                jz[js] = 'x是一个对象';
  16.                break;
  17.          default:
  18.                jz[js] = 'x是一个变量,值为:' + x;
  19.                return
  20.       }
  21.    }
  22.   for (var el in oj)
  23.   {
  24.      js++;
  25.      gjz[js] = lj == '' ? 'x' : lj;
  26.      if(oj instanceof Array)
  27.      {
  28.        gjz[js] = gjz[js] + '[' +el + ']';
  29.      }
  30.      else
  31.      {
  32.        gjz[js] = gjz[js] + '.' +el;
  33.      }
  34.      if(typeof(oj[el])=='object')
  35.      {
  36.        if(oj[el] instanceof Array)
  37.        {
  38.          jz[js] = '这是一个' + oj[el].length + '个元素的数组';
  39.        }
  40.        else
  41.        {
  42.          jz[js] = '这是一个对象';
  43.        }
  44.        json2arr(oj[el],gjz[js]);
  45.      }
  46.      else
  47.      {
  48.        jz[js] = oj[el];
  49.      }
  50.   }
  51. }
  52. function arr2str(){
  53.     sgjz = gjz.join('`');
  54.     sjz = jz.join('`')
  55. }
复制代码

JS解析库.rar

11.15 KB, 下载次数: 263

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-10-27 21:37 | 显示全部楼层
wcymiss 发表于 2014-10-21 13:19
常用代码及自定义函数:

1、网抓主体代码:代码里的很多""就是留给你的填空题。。。

呃,原谅我吧,我是个怀旧的人。我的机器的配置目前为止仍旧是32位的winXP+2003office,IE也刚升级到IE8,之前一直用的IE6。弦月大师(xmyjk)所点评的内容我没有办法提供呀。。甩泪。。。







吴姐,可以安装一个虚拟机,有一些东西我也怀旧,不过新的东西总还是有很多优秀的地方




QQ图片20141027213942.jpg






点评

其实真相是我很懒。。  发表于 2014-10-28 09:14

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 13:04 , Processed in 0.043944 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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