ExcelHome技术论坛

 找回密码
 免费注册
QQ登录 只需一步,快速开始
新浪微博登陆 只需一步, 快速开始
   
高效办公必会的Office99uu优优 永久免费,网表让Excel秒变数据库 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! 国内首部Excel函数公式学习大典 职场充电黑科技, Office微99uu优优 免费下载Excel行业应用视频
300集Office 2010微99uu优优 Tableau-数据可视化工具 突破Excel限制,用活字格提高效率 12门Excel免费公开课任你学
你的Excel 201099uu优优学习锦囊 欲罢不能, 过目难忘的 Office 新界面 免费的Excel考勤计算系统
查看: 226640|回复: 1291
打印 上一主题 下一主题

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

  [复制链接]
TA的精华主题TA的得分主题
跳转到指定楼层
1
发表于 2014-10-21 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 wcymiss 于 2014-11-1 09:24 编辑

本帖主要针对的是不懂html的网抓新手,所以,本帖基本不谈原理,只说实战

学网抓对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

评分

参与人数 45财富 +300 鲜花 +89 技术 +3 微积分 +10 收起 理由
autumnalRain + 3 优秀作品
全日爱123 + 2 感谢帮助
weiyingde + 3 优秀作品
orientson + 2 优秀作品
wuliaolang + 2 感谢您的作品
查看全部评分
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏560 分享分享1 有用有用45 无用无用 分享到新浪微博
TA的精华主题TA的得分主题
推荐
 楼主| 发表于 2014-10-25 10:43 | 只看该作者 |楼主
本帖最后由 wcymiss 于 2014-10-27 13:07 编辑

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

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

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


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

  • Sub CopyToClipbox(strText As String)
  •     '文本拷贝到剪贴板
  •     With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
  •         .SetText strText
  •         .PutInClipboard
  •     End With
  • End Sub
  • 复制代码
    小贴士:
    点击Fiddler的Response框的WebView按钮可以看到HTML代码在网页上的显示效果。

    评分

    参与人数 2鲜花 +3 收起 理由
    740688321 + 1 优秀作品
    周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。
    查看全部评分
    TA的精华主题TA的得分主题
    2
     楼主| 发表于 2014-10-21 11:15 | 只看该作者 |楼主
    本帖最后由 wcymiss 于 2014-11-3 11:22 编辑

    目录:

    一、前期准备:
      1、fiddler的安装、设置、使用;
            Fiddler抓包并确认数据页面一例
      2、常用代码和自定义函数。

    二、获取数据:
      1、直接获取:
        a、GET;
             作业一
        b、POST;
            作业二
        c、静态参数;
        d、转码
      2、防盗链的处理:
        a、模拟Referer;
        b、模拟Cookie;
            继续唠叨Cookie--例子暂缺
            还是Cookie-----模拟Cookie欺骗服务器一例
            作业三
        c、模拟User-Agent ;
        d、其他发包头的模拟;
        e、动态参数
          动态参数又一例
          抓取QQ群成员清单
          用IE获取Cookie

    对获取数据作个小结

      3、其他
        a、缓存的困扰;
        b、重定向;
        c、代理

    三、提取数据:
      1、下载文件;
      2、转码;
      3、处理数据的通用方法
      4、处理table
      5、处理xml
      6、处理JSON
        a、初识JSON
        b、JSON转换成vba对象
        c、编写JavaScript代码处理JSON(一)
        d、编写JavaScript代码处理JSON(二)
        作业四

    四、发送数据
      1、登录;
        a、初识登录(以登录163邮箱为例)
        b、登录之后可以做什么----查询数据
        c、登录之后可以做什么----发送数据
        d、复杂登录前言
        e、复杂登录一:搜房网登录
        f、复杂登录二:58同城登录

      2、上传文件

    点评

    “Fiddler抓取法”  发表于 2014-10-23 13:02
    比我习惯好,我想到哪写到哪,代码也是慢慢发展的,所以都没法事先弄个目录  发表于 2014-10-22 19:22

    评分

    参与人数 14鲜花 +28 收起 理由
    lengyff + 2 太强大了
    周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。
    jinbinghao + 2 太强大了,最重要的是讲的还好!
    Rodevo + 2 太强大了
    lover2008 + 2 太强大了
    查看全部评分
    TA的精华主题TA的得分主题
    3
     楼主| 发表于 2014-10-21 11:25 | 只看该作者 |楼主
    本帖最后由 wcymiss 于 2014-10-31 10:36 编辑

    vba网抓常用方法:

    1、xmlhttp/winhttp法:
    用xmlhttp/winhttp模拟向服务器发送请求,接收服务器返回的数据。
    优点:效率高,基本无兼容性问题。
    缺点:需要借助如fiddler的工具来模拟http请求。

    2、IE/webbrowser法:
    创建IE控件或webbrowser控件,结合htmlfile对象的方法和属性,模拟浏览器操作,获取浏览器页面的数据。
    优点:这个方法可以模拟大部分的浏览器操作。所见即所得,浏览器能看到的数据就能用代码获取。
    缺点:各种弹窗相当烦人,兼容性也确实是个很伤脑筋的问题。上传文件在IE里根本无法实现。(有实现方法?请一定告诉我)

    3、QueryTables法:
    因为它是excel自带,所以勉强也算是一种方法。其实此法和xmlhttp类似,也是GET或POST方式发送请求,然后得到服务器的response返回到单元格内。
    优点:excel自带,可以通过录制宏得到代码,处理table很方便。代码简短,适合快速获取一些存在于源代码的table里的数据。
    缺点:无法模拟referer等发包头(如果你有在QT中模拟referer的方法,请一定告诉我)

    本帖主要讲述的是第一种方法。

    评分

    参与人数 6鲜花 +13 收起 理由
    周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。
    335081548 + 2 值得肯定
    JLxiangwei + 2 优秀作品
    fxl447098457 + 2 优秀作品
    xmyjk + 3 优秀作品
    查看全部评分
    TA的精华主题TA的得分主题
    4
     楼主| 发表于 2014-10-21 11:33 | 只看该作者 |楼主
    个人偏爱fiddler的原因:(唠叨话,可略过)

    1、fiddler不需要寄生在浏览器中,且可抓到多个浏览器的包。
    2、除了抓浏览器,一些联网的软件的请求数据过程也能抓到。如QQ。(据说网游也可以,不过我没试过)
    3、fiddler还能记录vba代码运行时的数据请求过程。
    4、界面清晰,查找数据方便。更有json、xml、javascript各种数据格式化的插件。
    5、还可以手工在fiddler里模拟发包,获取数据,方便测试。

    评分

    参与人数 4鲜花 +12 收起 理由
    周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。
    ghostjiao + 2 优秀作品
    liuguansky + 5 优秀作品
    xmyjk + 3 优秀作品
    查看全部评分
    TA的精华主题TA的得分主题
    5
    发表于 2014-10-21 11:40 | 只看该作者
    TA的精华主题TA的得分主题
    6
     楼主| 发表于 2014-10-21 11:45 | 只看该作者 |楼主
    fiddler的安装、设置、使用
    安装:
    下载链接:http://w.x.baidu.com/alading/anquan_soft_down_normal/10963安装了.Net Framework后才能安装fiddler。如果系统没有安装.Net Framework,在fiddler的安装中会提示下载安装。

    设置:
    1、菜单栏:Rules,勾选“Remove all Encodings”(解密所有加密数据)(很重要,否则之后会出现查找不到特征数据的情形)
    2、菜单栏:Rule,勾选"Hide Image Requests"(隐藏图片包)、"Hide CONNECTs"(隐藏CONNECTs包)


    3、菜单栏:Tools-Fidder Options-HTTPS,勾选"Capure HTTPS CONNECTs"、"Decrypt HTTPS traffic"、"Ignore server certificate
    errors"。(获取https包并忽略信任错误)



    使用:
    fiddler抓包有点类似excel里的录制宏。

    抓包步骤如下:
    1、为确保fiddler抓到完整的数据包,抓包前请手动清除浏览器cookie、缓存及历史记录。
    不要用fiddler上的按钮“Clear Cache ” ,这个按钮只能清除IE浏览器的缓存。
    2、打开fiddler,然后打开浏览器,输入网址,在网页里做所需操作。操作完毕后,进入fiddler,fiddler的左半边框框内的数据就是抓到的包。为了fiddler不受之后网页操作的影响,可以点击左下方的"Capturing"按钮停止fiddler抓包。

    fiddler抓包界面简单解析:
    1、左边的是session框,选择该框任意一条数据,右边菜单选择“Inspectors”后出现上下两个框:上边是Request,包含所有的发送请求;下方是Response,包含所有服务器响应请求后返回的内容。


    2、查找数据:
    抓到包后,session框里的数据太多,如何找到我们需要的呢?
    a、在fiddler里按ctrl+F,搜索所需某个比较有特征的数据,搜到后点击该session,Request框和Response框都选择“Raw”菜单。
    搜索框内可以选择搜索范围。


    b、在Response框下方的空白长条框里,输入之前搜索的那个特征数据,按回车,确认其是否存在于该Response内,如果存在,再查看上下文,确认是否是所需的数据页面。
    这步很重要,如果数据页面确认错了,接下来就都是做无用功了。

    3、数据页面确认后,我们写代码要模拟的就是Request框中的数据。

    小贴士:
    特征字符尽量不要选择中文,中文可能会有转码;也尽量不要选择带格式的文本。带格式的文本通常含有html代码。这些都有可能出现搜索不到数据的情形。




    补充内容 (2015-1-9 12:58):
    下载链接错了,那个是下载的更新。官网下载链接是这个:http://www.telerik.com/download/fiddler/fiddler4。你也可以百度搜索下载。

    点评

    额,下载链接打不开,显示为:无法显示该网页  发表于 2014-11-4 14:52
    ,跟着贴慢慢学习吧,不做蛋糕了吗?原教程文件发我下可以不?  发表于 2014-10-23 15:51

    评分

    参与人数 7鲜花 +15 收起 理由
    周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。
    brightred + 2 优秀作品
    念一环 + 2 优秀作品
    335081548 + 2 太强大了
    JLxiangwei + 2 优秀作品
    查看全部评分
    TA的精华主题TA的得分主题
    7
    发表于 2014-10-21 11:49 | 只看该作者
    TA的精华主题TA的得分主题
    8
     楼主| 发表于 2014-10-21 12:47 | 只看该作者 |楼主
    本帖最后由 wcymiss 于 2014-10-21 12:54 编辑

    Fiddler抓包并确认数据页面一例:

    网站:http://www.cffex.com.cn/fzjy/tjsj/pztj/
    操作:点击“品种日数据统计”,在日期起始框内选择2014-10-01,在日期截止框内输入今天日期,点击“查询”,随后出现的表格为所需数据。


    Fiddler操作:
    1、清除浏览器cookie、缓存、历史记录。
    2、打开fiddler,打开浏览器,输入网址进行操作。
    3、选择数据中某一段数字作为特征字符串在fiddler里进行查找。




    4、找到后确认是否是所需数据页面。



    IF  搜索成功 Then
         继续往下看。。。
    Else
         重新按照上述步骤抓包
    End IF

    评分

    参与人数 6鲜花 +12 收起 理由
    周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。
    zhao蓝 + 2 太强大了
    念一环 + 2 优秀作品
    335081548 + 2 优秀作品
    ghostjiao + 2 优秀作品
    查看全部评分
    TA的精华主题TA的得分主题
    9
     楼主| 发表于 2014-10-21 12:51 | 只看该作者 |楼主
    更多Fiddler的使用方法,敬请参考《Fiddler调试权威指南》一书。
    电子书下载地址:http://pan.baidu.com/s/1CRctw

    我昨天才发现有这本书,赶紧收藏,还没来得及看
    TA的精华主题TA的得分主题
    10
    发表于 2014-10-21 12:52 | 只看该作者
    您需要登录后才可以回帖 登录 | 免费注册 新浪微博登陆
    本版积分规则
    关闭

    最新热点上一条 /1 下一条

    关注官方微信,每天坐享新鲜教程
    手机版|关于我们|联系我们|ExcelHome    GMT+8, 2017-10-21 10:55 , Processed in 1.138421 second(s), 39 queries , Gzip On.
    Powered by Discuz! X3.3 © 2001-2017 Wooffice Inc.
        沪公网安备 31011702000001号 沪ICP备11019229号 本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师
    快速回复 返回顶部 返回列表
    99uu优优