打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel 不懂html也来学网抓(xmlhttp/winhttp fiddler)-ExcelVBA程序开发-ExcelHome技术论坛 - 手机版 - Powered by Discuz!
学网抓对vba的要求:
1、了解对象及对象属性方法的基本概念;
2、熟练使用循环、判断及vba数组;
3、掌握一种以上提取文本的方法,可以在各种有规律的文本里提取所需数据;
4、会调试代码,会用立即窗口、本地窗口。(很重要,请务必学会)
5、有录制宏的经验。

可以这样说,只要你具备上述vba知识,再对网抓有点兴趣,有点耐心,那你就能学会网抓。

我本人开始用xmlhttp和fiddler的时候,对html和javascript是一窍不通的,对get、post也不懂,全是依样画葫芦。画成功后,有了兴趣,才慢慢去寻找它的原理和相关知识去学习。我想我这样的学习方法或许可以给一些像我一样的小白一个借鉴。但愿没有误导新人才好。

学习html强力推荐此网站:http://www.w3school.com.cn/ ,绝对权威

==================================================
如果发觉楼主有写错的地方,或是用错术语,或是概念模糊,或是运行出错、运行效果与楼主不同,或是有看不懂、不理解的地方,请大家及时提出来。
希望在大家的帮助和建议下完善本帖,让不会网抓的朋友由此贴学会写一些基础的网抓代码,同时感受到网抓的乐趣。

谢谢大家!



补充内容 (2014-11-5 19:37):
交流QQ群:310731499
分享到新浪微博
本帖最后由 wcymiss 于 2014-10-27 13:07 编辑

处理table
table数据处理,除了之前的两种通用方法外,还有以下几种方法:

1、html法
   将table数据写入htmldocument对象,然后循环取出表格的各个元素。
   优点:可以利用htmldocument对象整理表格。
   缺点:需要学习html相关知识。
   以17楼作业二为例:
  1. Sub Main()
  2.     Dim strText As String
  3.     Dim arrData(1 To 1000, 1 To 3)
  4.     Dim i As Long, j As Long
  5.     Dim TR As Object, TD As Object
  6.    
  7.     With CreateObject('MSXML2.XMLHTTP')
  8.         .Open 'POST', 'http://www.pinble.com/Template/WebService1.asmx/Present3DList', False
  9.         .setRequestHeader 'Content-Type', 'application/json'
  10.         .Send '{pageindex:'1',lottory:'TC7XCData_jiangS',pl3:'',name:'江苏七星彩',isgp: '0'}'
  11.         strText = Split(JSEval(.responsetext), '<script')(0) '本例的script运行会提示错误,所以去除这部分script代码
  12.     End With
  13.    
  14.     With CreateObject('htmlfile')
  15.         .write strText
  16.         i = 0
  17.         For Each TR In .all.tags('table')(2).Rows
  18.             i = i + 1
  19.             j = 0
  20.             For Each TD In TR.Cells
  21.                 j = j + 1
  22.                 arrData(i, j) = TD.innerText
  23.             Next
  24.         Next
  25.     End With
  26.    
  27.     Set TR = Nothing
  28.     Set TD = Nothing
  29.     Cells.Clear
  30.     Range('C:C').NumberFormat = '@' '设置文本格式以显示数字前面的0
  31.     Range('a1').Resize(i, 3).Value = arrData
  32. End Sub

  33. Function JSEval(s As String) As String
  34.     With CreateObject('MSScriptControl.ScriptControl')
  35.         .Language = 'javascript'
  36.         JSEval = .Eval(s)
  37.     End With
  38. End Function
2、QueryTable法:
   这个是excel自带的网抓利器。个人觉得它最大的优势就是处理table很方便。
   优点:处理table方便,代码简短。
   缺点:会产生定义名称。多页循环时每页都会产生行字段名称,需要后续处理删除。
   仍以作业一的第1题为例:
  1. Sub Main()
  2.     Cells.Delete
  3.     With ActiveSheet.QueryTables.Add('url;http://data.bank.hexun.com/lccp/jrxp.aspx', Range('a1'))
  4.         .WebFormatting = xlWebFormattingNone '不包含格式
  5.         .WebSelectionType = xlSpecifiedTables '指定table模式
  6.         .WebTables = '2' '第2张table
  7.         .Refresh False
  8.     End With
  9. End Sub
代码相当简短。


3、复制粘贴法:
   table部分的文字可以直接复制到单元格内,且保留数据原格式。
   优点:只需取出table部分,不需分析数据内部结构。代码编写简便。
   缺点:有时格式反而是累赘。
  1. Sub Main()
  2.     Dim strText As String
  3.     With CreateObject('MSXML2.XMLHTTP')
  4.         .Open 'GET', 'http://data.bank.hexun.com/lccp/jrxp.aspx', False
  5.         .Send
  6.         strText = .responsetext
  7.     End With
  8.     strText = '<table' & Split(Split(strText, '<table')(2), '</table>')(0) & '</table>'
  9.     CopyToClipbox strText
  10.     Cells.Clear
  11.     Range('a1').Select
  12.     ActiveSheet.Paste
  13. End Sub

  14. Sub CopyToClipbox(strText As String)
  15.     '文本拷贝到剪贴板
  16.     With CreateObject('new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}')
  17.         .SetText strText
  18.         .PutInClipboard
  19.     End With
  20. End Sub

    本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
    打开APP,阅读全文并永久保存 查看更多类似文章
    猜你喜欢
    类似文章
    【热】打开小程序,算一算2024你的财运
    fiddler的安装、设置、使用
    HTTP API接口测试利器PostMan介绍
    web debugger fiddler 使用小结
    用C#实现修改网页数据
    网页内容不能复制?网页内容无法复制?如何复制网页内容?网页内容不让复制
    如何解决网页不让复制的办法
    更多类似文章 >>
    生活服务
    热点新闻
    分享 收藏 导长图 关注 下载文章
    绑定账号成功
    后续可登录账号畅享VIP特权!
    如果VIP功能使用有故障,
    可点击这里联系客服!

    联系客服