ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

   
EH云课堂-专业的职场技能充电站 限时送,魔方网表将Excel变在线系统 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 高效办公必会的Office实战技巧 免费下载Excel行业应用视频
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 免费的Excel考勤计算系统
查看: 311704|回复: 1367
打印 上一主题 下一主题

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

    [复制链接]

ag娱乐平台手机版,  问:外层空间的持久和平与世界各国的安全、繁荣和发展是密切相关的。请问中国军队在防止外空化方面有哪些具体举措?

  从2004年度调查起,将设立“中国企业信息化500强用户选择奖”。该奖将授予优秀的信息化服务商。朝韩将打出的“统一旗”包括独岛 日本不干了  此后,我国相关厂对该系统进行了国产化,研制成功K/STW-15投物降落伞,根据部队的实用,又设计采用了主、辅气囊技术的K/STW-17投物降落伞,一举将我国空军最大空投能力提高到10吨左右。解决了ZBD03伞兵战车的空投问题。2005年中俄联合军演,我国空降兵重装空投系统首次公开亮相,实现了一架伊尔-76型飞机连续空投三辆ZBD03伞兵战车,表明我国空降兵正式迈入了机械化时代。考虑到我国空军伊尔-76数量不足,所以陕西飞机公司根据空军的要求又发展了运-8重装空投型飞机,它最大空投重量提高到9吨左右,实现了一次空投一辆ZBD03伞兵战车的目标。

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强力推荐此网站:/www133bw3school133bcom133bcn/ ,绝对权威

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

谢谢大家!



补充内容 (2014-11-5 19:37):
交流QQ群:310731499

评分

参与人数 56财富 +300 鲜花 +109 技术 +3 微积分 +10 收起 理由
a4035053 + 2 优秀作品
mengling830629 + 1 太强大了
wuxianyu86 + 1 优秀作品
黄金万两︶ㄣ + 2 太强大了
松叶落 + 2 优秀作品

查看全部评分

TA的精华主题

TA的得分主题

推荐
 楼主| 发表于 2014-10-25 10:43 | 只看该作者
本帖最后由 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", "/www133bpinble133bcom/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;/data133bbank133bhexun133bcom/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", "/data133bbank133bhexun133bcom/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
复制代码
小贴士:
点击Fiddler的Response框的WebView按钮可以看到HTML代码在网页上的显示效果。

评分

参与人数 4鲜花 +7 收起 理由
astupig + 2 优秀作品
黄金万两︶ㄣ + 2 优秀作品
740688321 + 1 优秀作品
周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。

查看全部评分

TA的精华主题

TA的得分主题

3
 楼主| 发表于 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的得分主题

4
 楼主| 发表于 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的方法,请一定告诉我)

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

评分

参与人数 7鲜花 +15 收起 理由
YZC51 + 2 优秀作品
周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。
335081548 + 2 值得肯定
JLxiangwei + 2 优秀作品
fxl447098457 + 2 优秀作品

查看全部评分

TA的精华主题

TA的得分主题

5
 楼主| 发表于 2014-10-21 11:33 | 只看该作者
个人偏爱fiddler的原因:(唠叨话,可略过)

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

评分

参与人数 6鲜花 +16 收起 理由
黄金万两︶ㄣ + 2 优秀作品
wuzaijin2012 + 2 优秀作品
周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。
ghostjiao + 2 优秀作品
liuguansky + 5 优秀作品

查看全部评分

TA的精华主题

TA的得分主题

6
发表于 2014-10-21 11:40 | 只看该作者

TA的精华主题

TA的得分主题

7
 楼主| 发表于 2014-10-21 11:45 | 只看该作者
fiddler的安装、设置、使用
安装:
下载链接:/w133bx133bbaidu133bcom/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):
下载链接错了,那个是下载的更新。官网下载链接是这个:/www133btelerik133bcom/download/fiddler/fiddler4。你也可以百度搜索下载。

点评

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

评分

参与人数 8鲜花 +17 收起 理由
黄金万两︶ㄣ + 2 优秀作品
周星骋 + 2 平生不识wcymiss,纵称英雄也枉然。
brightred + 2 优秀作品
念一环 + 2 优秀作品
335081548 + 2 太强大了

查看全部评分

TA的精华主题

TA的得分主题

8
发表于 2014-10-21 11:49 | 只看该作者

TA的精华主题

TA的得分主题

9
 楼主| 发表于 2014-10-21 12:47 | 只看该作者
本帖最后由 wcymiss 于 2014-10-21 12:54 编辑

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

网站:/www133bcffex133bcom133bcn/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的得分主题

10
 楼主| 发表于 2014-10-21 12:51 | 只看该作者
更多Fiddler的使用方法,敬请参考《Fiddler调试权威指南》一书。
电子书下载地址:/pan133bbaidu133bcom/s/1CRctw

我昨天才发现有这本书,赶紧收藏,还没来得及看

TA的精华主题

TA的得分主题

11
发表于 2014-10-21 12:52 | 只看该作者
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

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

GMT+8, 2019-3-22 00:20 , Processed in 0.115336 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Wooffice Inc.

   

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

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

快速回复 ag娱乐平台手机版 返回列表
俄媒:核潜艇去美基地门口执行任务 全程未被发现 台民进党四大天王为何回归 网友爆玄机:回光返照 日前首相:假如习主席能访日 安倍你该学踢足球了 英诺李竹:特立独行、行胜于言是天使投资人必备素质 评论:整治骚扰电话 让民众耳边清清静静 单欢欢首发为球队首开记录 吉马良斯U19半场遭逆转 刘强东:做一个不辜负期待、不愧对内心的“村长” 塞内加尔军用直升机坠毁 导致6人死亡14人受伤 美高官称中美正就贸易冲突进行谈判 商务部否认 女子自制炸弹想抢银行100万 详细步骤写了32页纸 毒贩持刀拒捕挟持出租车 警察开枪将其击伤终擒获 外媒:喀麦隆获中国5000万美元军援 将用于购买武器
经济日报:扩大共同繁荣的“朋友圈” 骑士旧将狂轰54分!老汉遭到10000点伤害! 意大利大选现僵局 前总理伦齐宣布辞去民主党职务 湖南湘潭一名盗窃嫌犯拒捕 鸣枪无效后被击中死亡 清明节北京雨雪暂歇 气温低迷最高仅9℃ 安倍确认与台政治切割 国台办:一中原则是共识 保护腰部:实实在在的大事 联想要誓死打赢的保卫战 背后是怎样的真相与博弈 小威廉姆斯收获罗杰斯杯外卡 为美网积极热身 印度一家育幼院逾40名女童遭性侵 一人遇害 Airbnb拟大规模拓展业务 向连锁酒店和旅行社靠拢 俄罗斯:不接受前特工“中毒”案相关通牒
迅雷2017财年第四季度财报推迟到明早发布 首都机场T2航站楼实现“人脸识别”快速过安检 孟加拉反对派领袖因健康不佳获准保释 云南大理苍山林区发生森林火灾 730人正全力扑救 意大利将组阁 市场为何如此惊恐? 拼多多最终定价19美元 IPO认购或超募20倍 佛山一外卖小哥骑摩托违章959宗 扣3351分罚近18… 俄军再出严重空难 米-8直升机坠毁致6人死亡 俄大选在即 民调显示近七成俄罗斯人拟投票给普京 胡忠雄任长沙市副市长 代理市长(图/简历) 吕秀莲称台北市长选举会赢:民进党应与柯文哲切割 \"80后\"付巧妹获科技创新人物:改写亚洲古人类演化… BroadLink完成D轮3.43亿元融资 中信产业基… ag娱乐平台手机版