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-25 23:02 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
第二个问题,是不是ChildNodes下的innertext
QQ截图20141025230004.png

TA的精华主题

TA的得分主题

发表于 2014-10-25 23:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
set tb = html.all.tags("div") 是IE法中常用的,HTML中很多 <div>,<tr>,<td>......之類的,這句的意思是把HTML中的所有有<DIV>的集合起來給TB這個值的,之後通常又會在當中再找其他東西,一層一層的找,會有點像數組那個的,不同的是一般只找集合的其中一個再往入面找下去,所以會有另一句Cells(n, j + 1) = tb(i).ChildNodes(j).innertext, 這句便是找到tb(i)中的childnodws(j)有有用的innettext,但  Cells(n, j + 1) = tb(i).ChildNodes(j).innertext 成句的意思應該是由 i 範圍內的 tb 中的 j 範圍內的 childnodes.innertext 也會抽出來放在 cells 中.
這樣說可能複雜點,但你找一個帖用IE法來解決的,把程序自己用 F8 來每行試一試,在區域變數中看便會找到這中間的意思了

TA的精华主题

TA的得分主题

发表于 2014-10-25 23:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
半個題外話
由於本人是用繁體OFFICE的,所以在程序窗口中,所有的簡體字也變成亂碼了,請問有什麼辦法嗎?

点评

这个不清楚哎,或者你转成Big5编码试试?  发表于 2014-10-27 13:00

TA的精华主题

TA的得分主题

发表于 2014-10-25 23:41 | 显示全部楼层
renahu 发表于 2014-10-25 21:38
这个精加工的难道是从复制的毛坯上一点点拆出来的吗?这样做图什么呢?直接复制过来不就行了
  1.     URL = "http://webflight.linkosky.com/WEB/Flight/WaitingSearch.aspx?"
  2.     URL = URL & "JT=" & IIf(Me.optOneway, 1, 2) '单程or往返
  3.     URL = URL & "&OC=" & d(Me.cmbDepart.Text)   '出发地
  4.     URL = URL & "&DC=" & d(Me.cmbArrive.Text)   '目的地
  5.     URL = URL & "&dstDesp=GUANGZHOU%B9%E3%D6%DD"
  6.     URL = URL & "&dst2=CAN"
  7.     URL = URL & "&DD=" & Format(Me.DTPStarDate.Value, "YYYY-MM-DD")    '查询日期
  8.     URL = URL & "&DT=" & Replace(Me.cmbStartTime.Text, "点", "")    '时间点
  9.     URL = URL & "&BD="
  10.     URL = URL & "&BT=7"
  11.     URL = URL & "&AL=" & d(Me.cmbCompany.Text)  '公司
  12.     URL = URL & "&DR=" & IIf(Me.optDirect.Value, "true", "false")   '是否直达
  13.     URL = URL & "&image.x=29"
  14.     URL = URL & "&image.y=7"
复制代码
不是为了好看,因为你直接复制的时候固定了一个网页,你看上面那我段代码,就包括所有的变量,出发地、目的地、日期等,这是做动态查询的时候必备的,应该养成这样一个习惯
  1. Dim html As New HTMLDocument
复制代码
这是你htmlfile的前期绑定,引用的是Microsoft HTML Object Library

TA的精华主题

TA的得分主题

发表于 2014-10-26 08:18 | 显示全部楼层
suwenkai 发表于 2014-10-25 22:57
第一个问题,看图片,是DIV吧。

这个是从哪里截出来的画面?

TA的精华主题

TA的得分主题

发表于 2014-10-26 08:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
浮华、缠绕指尖 发表于 2014-10-25 23:41
不是为了好看,因为你直接复制的时候固定了一个网页,你看上面那我段代码,就包括所有的变量,出发地、目 ...

谢谢,前期绑定成功了,都可以智能提示了。关于网址拆开的问题,既然不是为了好看,那就是为了使网址结构看起来清晰吧?其实,还是抓包后先从request窗口中把url拷贝过来,再一段一段拆开的,我原来还以为这一段一段的是从别的什么地方拷贝过来的。您说对吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-26 09:42 | 显示全部楼层
本帖最后由 wcymiss 于 2014-10-27 12:58 编辑

处理xml数据
8楼的例子返回的就是一个xml文档。

在excel里,有一个很快捷的方式导入xml文档:
  1. Sub Main()
  2.     ThisWorkbook.XmlImport _
  3.         URL:="http://www.cffex.com.cn/fzjy/tjsj/pztj/pzrtj/2014/index.xml", _
  4.         ImportMap:=Nothing, _
  5.         Overwrite:=True, _
  6.         Destination:=ActiveSheet.Range("a1")
  7. End Sub
复制代码
如果需要自定义提取的内容,你或者可以这样写:
  1. Sub Main()
  2.     Dim arrEM(1 To 4), arrEMname
  3.     Dim arrData(1000, 1 To 4)
  4.     Dim i As Long, j As Long
  5.     With CreateObject("MSXML2.XMLHTTP")
  6.         .Open "GET", "http://www.cffex.com.cn/fzjy/tjsj/pztj/pzrtj/2014/index.xml", False
  7.         .send
  8.         arrEMname = Array(, "productid", "tradingday", "volume", "openinterest")
  9.         With .responseXML
  10.             For i = 1 To 4
  11.                 Set arrEM(i) = .getElementsByTagName(arrEMname(i))
  12.             Next
  13.             For i = 0 To arrEM(1).Length - 1
  14.                 For j = 1 To 4
  15.                     arrData(i, j) = arrEM(j)(i).Text
  16.                 Next
  17.             Next
  18.         End With
  19.     End With
  20.     Cells.Clear
  21.     Range("a1:d1").Value = Array("品种", "日期", "总成交量", "总持仓量")
  22.     Range("a2").Resize(i, 4).Value = arrData
  23. End Sub
复制代码
xml的dom提取数据的方法有很多。
具体可以参考http://www.w3school.com.cn/xmldom/index.asp

小贴士:
1、当URL是一个格式化的xml文档时,xmlhttp可将服务器返回的数据整理为一个DomDocument对象放在responseXML中。
你也可以CreateObject("MSXML2.DomDocument")然后用load(url)或者loadxml(text)方法获得DomDocument对象。

2、点击Fiddler的Response框的XML按钮,可以很清晰的看到XML数据结构。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-10-26 10:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这方法不错

TA的精华主题

TA的得分主题

发表于 2014-10-26 10:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wcymiss 发表于 2014-10-26 09:42
处理xml数据
8楼的例子返回的就是一个xml文档。

又学到了一招。

TA的精华主题

TA的得分主题

发表于 2014-10-26 11:07 | 显示全部楼层
wcymiss 发表于 2014-10-26 09:42
处理xml数据
8楼的例子返回的就是一个xml文档。

从来没搞过xml文档,又学到了一招
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 09:55 , Processed in 0.035785 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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