|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 心电感应 于 2015-3-21 11:28 编辑
******************** 提示 **********************
1、想学习网页采集,请务必提前学习VBA的基本操作常识,不要奢望用金山WPS来使用带有宏的工作簿,谢谢!
2、如果有代工需求的,请务必理解什么是尊重劳动,不要奢望使小钱做大事,亦不要奢望花一份钱做多件事,谢谢!
3、网页采集课程的注意事项及必备能力
****************************************************************************************
第一课:http://club.excelhome.net/thread-893760-1-1.html
第二课:http://club.excelhome.net/thread-894527-1-1.html
第三课:http://club.excelhome.net/thread-896608-1-1.html
第四课:http://club.excelhome.net/thread-897117-1-1.html
第五课:http://club.excelhome.net/thread-899268-1-1.html
高级篇:
第一课:http://club.excelhome.net/thread-902266-1-1.html
第二课:http://club.excelhome.net/thread-939881-1-1.html
本示例是为了解决http://club.excelhome.net/thread-893673-1-1.html此帖问题。
********************* 我是上课的分割线 **********************
初学者学习网页采集要经历的几大难关:
1、如何找到抓取的数据所在的网页链接---用httpfox或者fiddler2
2、如何得到数据-------------------------------用Microsoft.XMLHTTP、Msxml2.XMLHTTP、MSXML2.ServerXMLHTTP、WinHttp.WinHttpRequest.5.1对象
3、如何转换编码-------------------------------用Adodb.Stream对象
4、如何得到最终需要的数据-----------------vba字符串处理的基本功(字符串和数组处理,split、replace、filter、正则等)
下面看一个简单的网页采集例子- Sub test()
- Dim strRespText$, tt$, i&, DW$
- Dim URL
- URL = "******************************" '链接请看楼顶说明里的帖子,俺这里就不写了,以免被防水墙删贴
- With CreateObject("Microsoft.XMLHTTP")
- .Open "GET", URL, False '要抓取的链接,"GET"尽量用大写,以免某些系统不兼容
- .Send
- tt = .responsetext
- With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 'DataObject对象,数据放入剪贴板,记事本观察数据
- .SetText tt '因为XMLHTTP默认是UTF-8,不能识别gb2312,会发现数据乱码
- .PutInClipboard '所以不能采用.responsetext对象来得到字符串
- End With
- tt = BytesToBstr(.ResponseBody, "GB2312") '因此要用Adodb.Stream对象
- 'tt = StrConv(.ResponseBody, vbUnicode,&H804) '或者StrConv函数,从.ResponseBody得到字符串
- 'tt = StrConv(.ResponseBody, vbUnicode) '因网页为GB2312,简体版的操作系统也可以不写第三个参数
- With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") '得到的字符串放入剪贴板,记事本观察数据
- .SetText tt '数据正常显示,可以提取了
- .PutInClipboard
- End With
- tt = Replace(tt, vbCrLf, "") '清理要提取的数据,准备提取
- tt = Replace(tt, "</font></b></td> <td width=""392""><font size=""2"">", "")
- DW = Split(Split(tt, "报考单位:")(1), "<")(0) '提取数据
- MsgBox DW
- End With
- End Sub
复制代码 下面是采集用到的Bstr编码转换函数- Function BytesToBstr(strBody, CodeBase) '使用Adodb.Stream对象提取字符串
- Dim objStream
- On Error Resume Next
- Set objStream = CreateObject("Adodb.Stream")
- With objStream
- .Type = 1 '二进制
- .Mode = 3 '读写
- .Open
- .Write strBody '二进制数组写入Adodb.Stream对象内部
- .Position = 0 '位置起始为0
- .Type = 2 '字符串
- .Charset = CodeBase '数据的编码格式
- BytesToBstr = .ReadText '得到字符串
- End With
- objStream.Close
- Set objStream = Nothing
- If Err.Number <> 0 Then BytesToBstr = ""
- On Error GoTo 0
- End Function
复制代码 注意:如果网站是UTF-8编码的,不需要使用上面的函数进行转码,XMLHTTP默认会识别的。
VBA高级教程之基础篇--字符串和编码,使用ADODB.Stream转换ANSI/UNICODE/UTF-8等编码
交流:如何封装和保护Excel文件里面的公式及VBA代码,防止被抄袭和非授权外流
http://msdn.microsoft.com/zh-cn/library/ie/bg182326%28v=vs.85%29.aspx
使用 F12 开发人员工具
|
评分
-
45
查看全部评分
-
|