不懂html也来学网抓(xmlhttpwinhttp+fiddler)
处理table table数据处理,除了之前的两种通用方法外,还有以下几种方法: 1、html法 将table数据写入htmldocument对象,然后循环取出表格的各个元素。 优点:可以利用htmldocument对象整理表格。 缺点:需要学习html相关知识。 以17楼作业二为例:
vba网抓常用方法: 1、xmlhttp/winhttp法: 用xmlhttp/winhttp模拟向服务器发送请求,接收服务器返回的数据。 优点:效率高,基本无兼容性问题。 缺点:需要借助如fiddler的工具来模拟http请求。 2、IE/webbrowser法: 创建IE控件或webbrowser控件,结合htmlfile对象的方法和属性,模拟浏览器操作,获取浏览器页面的数据。 优点:这个方法可以模拟大部分的浏览器操作。所见即所得,浏览器能看到的数据就能用代码获取。 缺点:各种弹窗相当烦人...
常用代码及自定义函数: 1、网抓主体代码:
获取数据-直接获取-GET 再复制一次主体代码:
获取数据-直接获取-POST Open第一参数是“POST"的时候,Send方法一般会有参数。 举例: 网站:http://cn.zso8.com/odds/search/ 操作:第一行,“联赛选择”内选择“英超”,然后点击最右边的“确定”,获取该数据。 用fiddler找到数据页面,查看Request框Raw里的内容:
获取数据-直接获取-静态参数: 在Request框内经常能看到各种参数。 参数用于客户端与服务器的交互。 参数的结构形式是: 参数名1=参数值1&参数名2=参数值2&参数名3=参数值3..... 参数存在于SendData中(即vba代码里Send方法后面的那部分,又称POSTData、SendBody等),也存在于URL中。 在15楼的例子,参数存在于SendData中: type=2&CompanyID=11%7C%E6%BE%B3%E9%97%A8&leagueID=36&te...
获取数据-防盗链的处理-模拟Referer: 当你的vba代码中: GET部分后面的URL与Request框中的一摸一样; 或是POST的URL、SendData,与Request框中的一摸一样,Content-Type也没有忘记setRequestHeader; 但数据仍旧无法获取时,那你要获取的数据网页一定加了某种防盗链的措施。 此时要开始我们漫长的抓包调试过程了。(路漫漫其修远兮。。。) 调试这样的防盗链网页,如果在Request框中看到有这样的字样: Referer: http:/...
获取数据-防盗链的处理-模拟Cookie: 再次提醒,抓包前请先清除浏览器所有Cookie、缓存、历史数据。 举例: 网站:http://www.gzgczj.com:8080/costRegulatory/user.do?method=changeIndex&fareaId=1 操作:点击“控制价备案”,获取工程名称和招标控制价信息数据。 此网页模拟Referer后仍然无法获取数据。于是考虑模拟Cookie。 复制数据页面的cookie值,填入代码中(先不要去掉Referer的模拟):
继续唠叨Cookie。。。 33楼的例子里,Cookie值的最初来源,来自服务器返回的回应头信息的“Set-Cookie”,它对winhttp对象的Cookie进行了设置。这种Cookie来源,不需要写setRequestHeader来模拟Cookie,只需发送一下相关页面的请求即能获取该Cookie。 但有些网页的Cookie值,来源并非是回应头信息的“Set-Cookie”。它可能是responsetext中的一部分。这时就只能setRequestHeader了。 (刚刚想找一个我以前写...
获取数据-防盗链的处理-模拟User-Agent 很少遇到需要模拟User-Agent的网页。 服务器可以根据发送头里的User-Agent辨别你是用手机还是电脑,是用IE浏览器还是用火狐浏览器。 举例: EH查看他人的帖子(主题或回复)有些限制,需要登录才能查看所有会员的主题或回复。 但这种限制仅仅是在电脑上,手机不在此例。 因此,可以模拟User-Agent,伪装成在手机上浏览EH网站,查看他人帖子。 我们在电脑上也可以利用fiddler伪装成手机哦! 步骤: 1、打开Fiddler,...
获取数据-防盗链的处理-其他发包头的模拟 其他发包头的模拟也比较少见。 我的一位朋友Super(EH会员名:浮华、缠绕指尖)提供了一个需要模拟“x-requested-with”的网页:http://statementdog.com/analysis/tpe/8114#8114。大家可以自己抓包试试看。 如果你有需要模拟其他发包头的网页,请发消息给我,我会补充在这层楼里。谢谢。
之前提过,QQ软件也可以用Fiddler抓包。 我们来抓抓群成员的清单。 1、打开fiddler,打开群聊天窗口,“群设置”-“修改我的群名片”,等待出现了群成员列表后抓包结束。 2、在fiddler里搜索任意一个群成员的昵称或群名片(最好是纯英文的)或QQ号,确认数据网页。 看下数据网页的参数和Cookie:
缓存的困扰 用xmlhttp对象GET数据时,会优先从缓存中调取。 比如下面这段代码:
重定向 重定向用到的不多,可以稍微了解一下。 你向服务器申请访问地址A,服务器回应你,给你一个新地址B,让你访问它,这就是重定向。(具体请百度) 34楼的例子就是一个重定向的例子。
代理 如果服务器对同一IP有访问次数的限制,我们就要使用代理服务器了。 winhttp对象有SetProxy方法可以设置代理服务器,具体语句是: SetProxy 2,"xxx.xxx.xxx.xxx:xxxx" 测试代码(代理服务器地址可能已失效):
提取数据-下载文件 知道下载文件的真实地址,就能很方便的用xmlhttp或winhttp下载文件。 下载文件同样可以通过fiddler抓包。 打开fiddler,点击下载链接,出现文件下载窗口时点击“取消”即可。 在fiddler里查看抓到的Session前面的图标,文档的下载地址前面的图标一般是
转码 1、有时我们获取到的数据,有很多乱码。 这是因为,Responsetext是按照UTF-8的编码格式来解析获取到的数据的,如果数据不是UTF-8编码的字符,就无法正确显示。 这时需要我们获取ResponseBody(这是源生态的没有经过任何编码的数据),然后自行对其进行解析。 比如,116楼例子的网址:http://20140507.ip138.com/ic.asp,因为字符编码是GB2312(charset=gb2312),我们直接显示ResponseText时,中文字符就显示为乱码。
处理数据的通用方法: 1、数组法: 用split和数组,循环将所需数据取出。 优点:不需其他对象辅助,起点低,会数组即可。 缺点:需要分析数据结构,对于复杂结构的数据,需要多步才能完成。 以作业一的第1题为例:
处理table table数据处理,除了之前的两种通用方法外,还有以下几种方法: 1、html法 将table数据写入htmldocument对象,然后循环取出表格的各个元素。 优点:可以利用htmldocument对象整理表格。 缺点:需要学习html相关知识。 以17楼作业二为例:
处理xml数据 8楼的例子返回的就是一个xml文档。 在excel里,有一个很快捷的方式导入xml文档:
初识JSON JSON数据的特点: 1、用方括号扩住的是数组,数组内元素以逗号分隔。如:["甲","乙","丙"]、[1,2,3] 2、用花括号扩住的是对象,对象内各属性以逗号分隔,属性名和属性值以冒号分隔。同一对象里的属性名不会重复。如对象{"name":"甲","age":36},含name、age两个属性,属性值分别为 “甲”和36。 3、对象的属性值可以是数组。数组的元素可以是对象。JSON数据就是数组对象嵌套的大集合。比如,下面的JSON数据记录了甲乙二人的基本信息:
JSON转换成vba对象 1、JSON数组在vba内需要用For Each来获取其元素:(For Each 后面的变量不能定义为Object类型)
编写JavaScript代码处理JSON(一) 个人为了练习分析JavaScript、JSON的能力,常编写JavaScript处理JSON成一个“表格文本”,放入剪贴板后粘贴到工作表内。 此法需要学习JavaScript知识。http://www.w3school.com.cn/js/index.asp 仍以之前的JSON数据为例:
编写JavaScript代码处理JSON(二) 以70楼的获取QQ群成员列表的数据为例,再上一个处理JSON的例子:
分析JSON,RUBY最简洁
初识登录 登录其实没那么神秘。它也就是向服务器发送的一个POST请求。 我们来看一个简单的登录例子,以网易信箱(163.com)为例。 打开Fiddler,打开浏览器,登录网易信箱同时抓包。 搜索登录名vbatest(今天新注册的,你们可以随便整。哈哈):
登录之后可以做什么----查询数据 登录并非是我们的最终目的。最终目的是查询一些非登录不能查看的数据,或是发送数据。如论坛登录后,可下载附件,可发帖;邮箱登录后,可收件发件。 前面讲过,xmlhttp和winhttp只要该对象不销毁,都可以保持cookie。我们登录就是为了取得一个被允许查看数据和发送数据的cookie,然后执行查询和发送的请求。 仍以网易邮箱为例: 登录后网页显示邮件列表,此过程抓包。
登录之后可以做什么----发送数据上一贴说的是登录后查看邮件。这次来试一次发送邮件。手工登录、发送邮件,同时抓包。截取发送邮件内容的部分字符串作为搜索文本,找到session。拷贝Request里相关内容,编写代码:
复杂登录一:搜房网登录 网站:http://agent.soufun.com/ 做登录测试不用真实的用户名和密码也可以进行的。它与真实的用户名密码抓到的包,区别就是登录页面的Response信息不同,但Request信息是一样的。Response的内容仅仅是一个参考,不影响我们代码的编写。当然,有真实的用户名密码更好,你可以验证你的登录代码是否编写正确。 登录并用fiddler抓包。 以用户名作为搜索文本,搜到一个POST的session。 看其发送参数:
复杂登录二:58同城登录 网站:https://passport.58.com/login 代码运行时可能会跳出信任错误,请事先在internet选项中进行设置: Internet选项----高级----安全,去掉“检查服务器证书吊销*”前面的勾。 登录并抓包。 找到登录网页,查看参数:
执行网页脚本的方法非常值得学习,记得这是当初楼主的代码,我借花献佛,帮你阐述285的核心技术。 在内存中创建 htmlfile对象,再装入html脚本(只要是Javascript, jquery代码或链接地址)。当然事先将这些JS代码GET一下,装入本地缓存。 一般来讲,第二次get那些链接地址时(htmlfil加载时会自动get),系统默认直接从缓存中读取,这样的好处是,不会因为JS代码未加载完就执行JS函数。 Sub Main() Dim strHtml As String ...
汉字编码问题,现提供一段代码,希望别被误导。 因为涉及到的一些函数会因不同情况而返回不同的结果。(为防止歧义,对网上搜集的无用函数进行了删减)
上传文件 同样,上传文件也可以用fiddler抓包。 以EH的论坛上传附件为例。我们上传一个很小的压缩文件来测试(太大了的话,Fiddler的Raw里看不完整)。 在fiddler里搜索文件名(不含路径),确认我们需要模拟的网页。
使用IE网抓的例子
MSXML2.XMLHTTP.4.0对象
VBA-目录及文件操作汇总
网抓网络教程
评分