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-11-20 10:14 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 caipiaofans 于 2014-11-20 10:17 编辑


老师好....

我自己尝试 最简单 的 站点..
QQ截图20141120101352.jpg

QQ截图20141120101625.jpg
Sub Main()
    Dim strText As String
    With CreateObject("MSXML2.XMLHTTP") 'CreateObject("WinHttp.WinHttpRequest.5.1")
        .Open "GET", "http://trend.caipiao.163.com/11xuan5/?periodNumber=50", False
'       .setRequestHeader "Content-Type", "text/html; charset=UTF-8" 不用这句,能抓数据,但立即窗口显示很少数据,,,用了这句后 比之前的数据多了些.但还是显示不全啊...这个有问题吗???
'        .setRequestHeader "Referer", ""
        .Send
        strText = .responsetext
        Debug.Print strText
    End With
End Sub


点评

13楼有说,立即窗口显示数据有可能不完全。  发表于 2014-11-20 11:34
6楼,第3点,“抓包要模拟的是Request框的数据”。  发表于 2014-11-20 11:29

TA的精华主题

TA的得分主题

发表于 2014-11-20 10:15 | 显示全部楼层
没装NET ,就找了个 fiddler2的抓包

TA的精华主题

TA的得分主题

发表于 2014-11-20 11:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wcymiss 发表于 2014-10-21 16:10
获取数据-直接获取-转码:

在15楼的例子中:

太感谢老师了,我用你的GBKEnCode函数,终于圆满解决了505楼的问题。代码如下:
  1. Function GBKEnCode(strText)
  2.     Dim i, s
  3.     For i = 1 To Len(strText)
  4.         s = Hex(Asc(Mid(strText, i, 1)))
  5.         If Len(s) = 4 Then s = Left(s, 2) & "%" & Right(s, 2)
  6.         GBKEnCode = GBKEnCode & "%" & s
  7.     Next
  8. End Function

  9. Sub test2()
  10.     MsgBox Replace(GBKEnCode("HTTP://www.apabi.com/ValidateCode.aspx"), "%", "\u00")
  11. End Sub
复制代码
若网址字符串中含有汉字,也可通过以上代码转换为unicode码(即含有“u\”的代码)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-20 11:24 | 显示全部楼层
xfyanmeng 发表于 2014-11-19 17:38
老师好,想请教一下,json数组如果key值不确定怎么处理?我要程序循环处理!
比如你这个第一次循环是 {" ...

检查下你系统文件夹里有没有这个文件:
TLBINF32.DLL
没有的话网上下载一个注册下。

然后测试下面的代码。
  1. Sub Test()
  2.     Const strJSON As String = "[{""name1"":""甲儿"",""age1"":10},{""name2"":""甲女"",""age2"":7}]"
  3.     Dim objJSON As Object
  4.     Dim Child
  5.     Dim i As Long, j As Long
  6.     Dim objTLI As Object
  7.     Dim objMem As Object
  8.    
  9.     Set objTLI = CreateObject("tli.TLIApplication")
  10.    
  11.     With CreateObject("msscriptcontrol.scriptcontrol")
  12.         .Language = "JavaScript"
  13.         .AddCode "var mydata =" & strJSON
  14.         Set objJSON = .CodeObject
  15.     End With
  16.    
  17.     Cells.Clear
  18.     For Each Child In CallByName(objJSON, "mydata", VbGet)
  19.         i = i + 1
  20.         j = 0
  21.         For Each objMem In objTLI.InterfaceInfoFromObject(Child).Members
  22.             j = j + 1
  23.             Cells(i, j) = CallByName(Child, objMem.Name, VbGet)
  24.         Next
  25.     Next
  26.    
  27.     Set Child = Nothing
  28.     Set objJSON = Nothing
  29.     Set objMem = Nothing
  30.     Set objTLI = Nothing
  31. End Sub
复制代码
其实我很少这样取处理json数据。一般我都是用js语句处理好后再拿到vba里调用。

TA的精华主题

TA的得分主题

发表于 2014-11-20 11:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
要是 能有一个 详细的 网抓 数据处理,, 如何提取字符串,关键提取 等 代码讲解 就好了.

点评

除了vba方面的基本功,  发表于 2014-11-20 12:00
你说的这些帖子里都有。  发表于 2014-11-20 11:59

TA的精华主题

TA的得分主题

发表于 2014-11-20 12:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
VBA万岁 发表于 2014-11-20 11:20
太感谢老师了,我用你的GBKEnCode函数,终于圆满解决了505楼的问题。代码如下:若网址字符串中含有汉字, ...

在论坛上搜索良久,都没发现用VBA获取字符ASCII码的函数,于是,利用本帖20楼的GBKEnCode函数及以下帖子:
http://club.excelhome.net/thread-151294-2-1.html
14楼的代码,拼凑了一个用VBA获取字符ASCII码的函数,代码如下:
  1. Function GBKEnCode(strText)
  2. Dim i, s
  3. For i = 1 To Len(strText)
  4. s = Hex(Asc(Mid(strText, i, 1)))
  5. If Len(s) = 4 Then s = Left(s, 2) & "%" & Right(s, 2)
  6. GBKEnCode = GBKEnCode & "%" & s
  7. Next
  8. End Function

  9. Function 十六转十(a)
  10. Dim xi As Long
  11. Dim x As Long
  12. x = 0
  13. For i = Len(a) To 1 Step -1
  14. y = Mid(a, i, 1)
  15. If y = "a" Then xi = 10
  16. If y = "b" Then xi = 11
  17. If y = "c" Then xi = 12
  18. If y = "d" Then xi = 13
  19. If y = "e" Then xi = 14
  20. If y = "f" Then xi = 15
  21. If y = 0 Then xi = 0
  22. If y = 1 Then xi = 1
  23. If y = 2 Then xi = 2
  24. If y = 3 Then xi = 3
  25. If y = 4 Then xi = 4
  26. If y = 5 Then xi = 5
  27. If y = 6 Then xi = 6
  28. If y = 7 Then xi = 7
  29. If y = 8 Then xi = 8
  30. If y = 9 Then xi = 9
  31. x = x + xi * (16 ^ (Len(a) - i))
  32. Next i
  33. 十六转十 = x
  34. End Function

  35. Function getASCII(str)
  36. getASCII = 十六转十(Replace(GBKEnCode(str), "%", ""))
  37. End Function

  38. Sub 获取字符的ASCII码()
  39. MsgBox getASCII(ActiveCell)
  40. End Sub
复制代码




点评

自定义函数GBKEnCode里用到的每个vba函数你查看了帮助文档没有?!!!!!!!!!!!!!!!  发表于 2014-11-20 12:22
20楼你究竟仔细看了没?  发表于 2014-11-20 12:19

TA的精华主题

TA的得分主题

发表于 2014-11-20 12:52 | 显示全部楼层
VBA万岁 发表于 2014-11-20 12:12
在论坛上搜索良久,都没发现用VBA获取字符ASCII码的函数,于是,利用本帖20楼的GBKEnCode函数及以下帖子: ...

回头再看20楼代码,突然发现原来Asc函数就是将字符转换为ASCII码的函数。
汗颜!......

点评

十六转十的方法呢?找到没有?帮助里有的。  发表于 2014-11-20 14:36

TA的精华主题

TA的得分主题

发表于 2014-11-20 15:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
onlycxb 发表于 2014-10-22 08:25
作业2、网站:http://www.caac.gov.cn/S1/GNCX/,     操作:点击“查询”,获取航班信息数据。'顺便把航 ...

CreateObject("Adodb.Stream")

大哥,请问这代码的前提是不是还有安装什么才能运行啊?为什么说应用程序定义或对象定义错误啊???请解答啊。。。

点评

你装的office不是完全版的吧。  发表于 2014-11-20 21:44

TA的精华主题

TA的得分主题

发表于 2014-11-20 15:57 | 显示全部楼层
本帖最后由 VBA万岁 于 2014-11-20 16:41 编辑
VBA万岁 发表于 2014-11-20 12:52
回头再看20楼代码,突然发现原来Asc函数就是将字符转换为ASCII码的函数。
汗颜!......


另,十六进制转十进制的工作表函数Hex2Dec测试如下:
Sub 十六进制转十进制()
    MsgBox Application.Hex2Dec(ActiveCell)
End Sub

不知是否还有十六进制转十进制的VBA函数,请吴姐指点!

点评

看hex函数帮助里的最后一句话。  发表于 2014-11-20 21:44

TA的精华主题

TA的得分主题

发表于 2014-11-20 17:22 | 显示全部楼层
本帖最后由 VBA万岁 于 2014-11-20 20:26 编辑
wcymiss 发表于 2014-10-21 16:10
获取数据-直接获取-转码:

在15楼的例子中:

参照老师的GBKEnCode函数,再写一个将字符转换为unicode码(含有“\u”的编码)的函数。
  1. Function URLencode(strASCII As String) As String
  2. Dim i, s
  3. For i = 1 To Len(strASCII)
  4.     s = Hex(Asc(Mid(strASCII, i, 1)))
  5.     s =IIf(Len(s) = 4, "", "00") & s
  6.     URLencode = URLencode & "\u" & s
  7. Next
  8. End Function

  9. Sub test()
  10.     MsgBox URLencode(ActiveCell)
  11. End Sub
复制代码

点评

你这个是错误的。\u是unicode编码,不是gbk编码。再去看看javascript的6个转码函数,以及vba的chr、chrw、asc、ascw。立即窗口多调试调试这些函数的结果。  发表于 2014-11-20 21:43
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 06:03 , Processed in 0.044009 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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