ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 20568|回复: 9

[原创] 【进阶】VBA异步多线程网抓教程

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-6 23:58 | 显示全部楼层 |阅读模式
本帖最后由 wmx12345 于 2014-11-7 11:23 编辑

学习VBA网抓,请参照网抓前辈wcymiss 写的精品帖子http://club.excelhome.net/thread-1159783-1-1.html
学习以上这个贴,许多对网抓富有激情的程序猿,会觉得意犹未尽,本帖将讲网抓的高级技巧,异步多线程网抓。
说起异步多线程,许多人都会说VBA只能单进程,不可能做到异步多线程,即使做了,也不够稳定,简直就是垃圾。我只想说,十八般兵器,各有各的长处,无所谓优劣,只有会不会用,精不精。OK,废话不多讲,进入正题。

学习准备知识:
1
、在VBA中测试通过的网抓代码。
2
、类的创建、事件的声明及调用。
3
、异步、回调、多线程的基本概念。

工具:
MicrosoftVisual Basic 6.0 (SP6)
MicrosoftExcel 2003或以上版本


心理准备:
必定ActiveX EXE需要使用VB进行封装,所以需要扎实的类基础知识、ActiveX的调试基本技巧、对各种概念的理解,在准备进行做异步多线程网抓之前,务必将这些知识都学一遍。
本教程并不适合VBA初学者,初学者学习本教程,需要下一番功夫。


类的使用方法:
对于类的学习,论坛中有许多教程,不再赘述,请自己搜索教程。


VB事件的解释:
事件被声明之后,就可以使用 RaiseEvent 语句来产生该事件。如果在[url=]标准模块[/url]中出现 Event 声明,就会产生语法错误。不能声明带返回值的事件。
其实不必想太多,看一下Excel的事件就知道了。Excel使用Event关键字声明了一个事件,然后在Range值发生改变的地方RaiseEvent change,change事件是带有Target参数的。VBA是调用事件的,Excel中是声明、引发事件的。触发事件,实际上就是Excel把控制权交给VBA,我们称之为回调或者事件触发。


异步的实现方式:
使用Timer控件实现异步。也可以使用其他方式来避免创建窗体的这种资源浪费。不过我个人觉得,现在电脑,早就不是VB6.0那个年代的配置了,没必要追求性能上的极致,所以我推荐使用这种简单的方式来实现异步。


多线程的实现方式及控制:
ActiveX EXE 本身就是一种服务器模式,可以独立运行,所以是具备多线程特性的。结合异步使用之后,使用事件回调的方式,将结果以参数的方式返回给VBA这个调用者。当然还可以使用Byref(或者不加前缀)传递参数,从而可以在运行过程中,改变ActiveX EXE内部的参数。


异步网抓框架结构:
对于框架结构的描述,我使用一组对话来描述一下。
VBA:ActiveX EXE服务器,你给我网抓几个网页。要求是开始网抓的时候,告诉我一声,我准备一下,抓结束了,将结果放到我指定的地方去,我来查收。
ActiveX EXE服务器:好嘞,您就瞧好吧。网抓1号听命,你去抓百度网页。网抓2号听命,你去抓EH网页。
网抓1号:我开始了,VBA,您处理一些事情吧,您处理好了,我再继续。
VBA:好的,我弄一下,叽里呱啦。好了,网抓1号,你继续吧。
网抓1号:好嘞,我开始网抓了。。。叽里呱啦,叽里呱啦。。。
网抓2号:VBA,我要开始了,您处理一些事情吧,您处理好了,我再继续。
VBA:好的,我弄一下,叽里呱啦。好了,网抓2号,你继续吧。
网抓2号:好嘞,我开始网抓了。。。叽里呱啦,叽里呱啦。。。
网抓1号:VBA,我网抓结束了,结果已经放到您指定的地方了。等您再处理一些事情,我再结束。
VBA:好的,叽里呱啦,叽里呱啦。网抓1号,你继续吧。
网抓1号:好的,我继续了,叽里呱啦。ActiveX EXE服务器,我做完了,我要结束线程(自杀)了。
ActiveX EXE服务器:准了,你去吧!
网抓2号:VBA,我网抓结束了,结果已经放到您指定的地方了。等您再处理一些事情,我再结束。
VBA:好的,叽里呱啦,叽里呱啦。网抓2号,你继续吧。
网抓2号:好的,我继续了,叽里呱啦。ActiveX EXE服务器,我做完了,我要结束线程(自杀)了。
ActiveX EXE服务器:准了,你去吧!
ActiveX EXE服务器:VBA,您交给我的任务,我都完成了。我也要结束进程了,后会有期!
VBA:好的,拜拜!


模板使用方法:
1、在VBA中调测好网抓代码之后,将代码复制到模板的 GetWebData类中,调整结构方便调用。请注意,复制过去的代码,不允许夹杂任何对Excel的操作,否则这种封装是不合理的,也会增加复杂度。
2、根据需要,可以增加类,尽量把功能细化、模块化。
3、如果直接测试模板,需要先注册一下ActiveX EXE,或者使用VB6.0生成一下exe。否则,Excel主程序引用会丢失。
4、关于调试请注意以下两个设置。第一次生成可以选不兼容,后续生成得调为工程兼容。调试程序选择Excel.exe。具体方法为,运行之后,会弹出Excel界面,再双击“异步多线程调试主程序.xls”,然后运行VBA中的代码,就可以调试ActiveX EXE了。如果有Bug会在ActiveX EXE内部中断。
调试启动程序.jpg 版本兼容.jpg


写本帖的初衷:
共享本帖中的技术,意在交流异步多线程技术,发布的模板可能调试上还存在一定的缺陷和不足,请有兴趣研究的朋友,反馈和更新版本,务必将这项技术发扬下去。本人对于异步多线程技术,也是一知半解,学习不够深入,所以没法讲解深层次上的原理,如果本帖内容有误,请积极指出,我将及时更正。


创建ActiveX EXE的流程:
创建ActiveX EXE过程.jpg
窗体及类的属性设置.jpg
设置多线程01.jpg
设置多线程02.jpg
编译为exe.jpg
引用Active EXE.jpg
调试结果.jpg
ActiveX EXE模板.rar (21.92 KB, 下载次数: 667)

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-11-7 08:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不错, 跟贴学习.

TA的精华主题

TA的得分主题

发表于 2014-11-7 08:49 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-11-7 11:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
电神 果然出手就非同凡响~

TA的精华主题

TA的得分主题

发表于 2014-11-10 18:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
顶一顶,多学习

TA的精华主题

TA的得分主题

发表于 2014-11-10 18:57 | 显示全部楼层
wcymiss 发表于 2014-11-7 08:49
电神,我来学习啦O(∩_∩)O

电神,是紫电吗?

点评

是滴。。  发表于 2014-11-11 09:09

TA的精华主题

TA的得分主题

发表于 2016-11-18 19:29 | 显示全部楼层
天哪,电影对白 !!!

大神您歇着,让我去干活,等我干完了回来告诉您

TA的精华主题

TA的得分主题

发表于 2017-8-8 20:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
自学的vba,有些代码不够精简,求大神帮忙看看怎么优化,解决问题,可以微信支付报酬
http://club.excelhome.net/thread-1361744-1-1.html

TA的精华主题

TA的得分主题

发表于 2021-4-26 22:04 | 显示全部楼层
xmlhttp和winhttp本身都支持异步采集

TA的精华主题

TA的得分主题

发表于 2021-12-6 14:15 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 20:41 , Processed in 0.056421 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

快速回复 返回顶部 返回列表