开发者社区> 王清培> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

.NET实现之(WebBrowser数据采集—终结篇)

简介: 我们继续上一篇".NET实现之(WebBrowser数据采集-基础篇)",由于时间关系这篇文未能及时编写;上一篇文章发布后,得来了部分博友的反对意见,觉得这样的文章没有意义,WebBrowser采集数据效率低下用WebRequest效率就能提高了,本人不理解,为什么同样是HTTP协议进行数据采集,效...
+关注继续查看

我们继续上一篇".NET实现之(WebBrowser数据采集-基础篇)",由于时间关系这篇文未能及时编写;上一篇文章发布后,得来了部分博友的反对意见,觉得这样的文章没有意义,WebBrowser采集数据效率低下用WebRequest效率就能提高了,本人不理解,为什么同样是HTTP协议进行数据采集,效率能提高多少,在采集过程中同样要经历种种的高层协议向底层协议转换等过程,我个人感觉WebRequest是实现更多的扩展性,本人的WebBrowser数据采集,并不是谈抓取数据的效率,重点是讲解WebBrowser控件的原理,能用WebBrowser与HTML网页进行很方便的集成,本人的下一篇文章".NET实现之(WebBrowser数据采集-续)",就将用WebBrowser进行与HTML网页进行混合使用,在HTML的对象中我要在我的WebBrowser控件中通过读取数据库,将Winform的控件在HTML中进行呈现,然后将我们的Winform中的数据动态的填入HTML网页中;这样的人性化、方便性、模拟性我想是WebRequest所不能取代的,我们大部分的软件是要提供给用户使用的,有一个友好的用户界面是必须的;[王清培版权所有,转载请给出署名]

今天我要讲的主要内容是通过WebBrowser实现数据抓取,上一篇文章并没有讲到怎么抓取数据,而是简单的讲解了WebBrowser控件的由来和一些互操作方面的东西,这篇文章将完全的讲解在用WebBrowser进行数据抓取时遇到的种种问题,本人有很长一段时间都在做数据抓取,第一次做数据抓取的时候是和我的一个好搭档一起做的,当时遇到很多困难还是他默默的解决了;在项目完成之后,我就决定将这样的经验与大家分享;我感觉在用WebBrowser进行抓取的时候最大的问题就是网页加载问题,在WebBrowser控件中有一个事件是我们必须要用到的DocumentCompleted事件,在网页加载完毕过后我们要进行相应的判断,比如当前页面是否是登录页面,我们做的网页抓取工具不可能是傻瓜式的手动抓取点一下抓一下,我们是完全自动化的,我们只需要一个登录就行了,因为现在基本上的网页登陆都是需要验证码的,所以登录需要我们人工的去识别填写,一旦登录成功后,一切均有系统自动完成,比如:动态跳转到采集页面、数据抓取、翻页等等过程都已经自动化,由于网页在频繁的请求过程中难免不太稳定,会造成无缘无故的停止,比如断网、异步加载迟钝、这样我们只能是通过观看界面才能清楚发生了什么,在通过断点继续抓取;我们不讨论那种抓取好坏是讨论哪种更适合用户的项目需求;我们需要看一张图才能明白抓取的大概原理:[王清培版权所有,转载请给出署名]

1:这是一幅整图,由于图片太大,本人就截成三个小图了;

通过上图的详细的步骤说明,我们清楚的指导我们要怎么做了;我们切换到代码片段:

2:

这是本人的项目结构,在Common文件夹里面有一个显眼的文件GatherWebBrowser.cs这是本人对WebBrowser控件进行了一层简单的封装,就是在里面加上了一些事件参数,这个文件下面有一个GatherWebBrowserArgs.cs文件,这个是WebBrowserDocumentCompletedEventArgs对象的配送对象;

3:

这个对象的目的就是将DocumentCompleted事件分离出来,让我们处理N层跳转的时候能很方便; 由于代码较多,我们就看几个关键的地方,能帮大家理清一个头绪就行了;

4:

这个是我们Winform窗口,WebBrowser控件就是我封装的那个控件,大家请注意,在我们层层跳转到最后的采集页面时,我们要将事件链中的第一个事件断开,为什么要断开,是因为我们的WebBrowser控件的DocumentCompleted事件总是会在网页加载完毕后触发,一旦当我们进入到采集生命周期中的时候,这部分的逻辑我们是不需要在处理的,这里就涉及到一个技术细节“委托链”,如果对这方面的东西不太了解的话,请查阅本人的“.NET简谈委托链”一文;

由于数据采集逻辑比较复杂,特别是自动数据采集,需要处理很多逻辑问题,这些东西都是因需求不同而不同,所以本人也只能讲解到这个层度了,大概的实现方式都是这样的,只要我们去慢慢的分析前后关系,HTML的组织,我相信肯定能写出好的数据采集;在下面的一篇文章中我将要通过WebBrowser实现与网页交互的系统,这方面的需求也是我们经常碰到的,比如我们有一个C/S的系统,但是我们的C/S系统要依附于B/S的系统,需要将我们的C/S系统的数据作为B/S系统的操作条件,在输入查询条件的时候,我们需要调用我们的Winform窗口,进行数据查询,然后将我们的Winform结果填到HTML的文本框中;请读者继续关注,谢谢;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C#中WebBrowser控件的使用
今天在YouTube上看了一个关于WebBrowser控件用法的小视频,做一下总结。 首先创建一个WinForm程序,拖入一个textbox控件和一个button按钮,然后拖入一个panel控件,如图所示: 拖入panel控件后,找到WebBrowser控件并双击,WebBrowser控件就...
1137 0
WebBrowser控件使用详解
原文:WebBrowser控件使用详解 方法 说明  GoBack 相当于IE的...
761 0
WebBrowser
原文:WebBrowser 做WEB开发的想把网页做成应用程序的界面,开发应用程序的又想把程序界面做得和WEB一样。本文介绍一下用HTML做软件UI用到的的一些技术。 其实HTML UI也不是什么新鲜事了,Norton Antivirus从几年前的版本就开始用了,vs.net2002中的开始页也用了这个技术。
825 0
WebBrowser!
原文:WebBrowser! 我现在先放一些基础的文章在这里,以后再放别的上来官方范例连接http://www.microsoft.com/china/msdn/library/langtool/vcsharp/OvervwWebBrowExp.mspxQ&A    2005年5月21日 0:14:19 Q: 新键入的地址不能在新建好的窗口里打开:A:每个新窗口(或者是Tab页)新建的时候也要新建一个浏览器,然后新建的浏览器的父框架是新建的那个窗口(或者是Tab页)。
802 0
【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
原文:【WPF】监听WPF的WebBrowser控件弹出新窗口的事件 WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗口的,那么它会生生的弹出一个IE窗口来,而不是在内部跳到该链接。
1100 0
利用WebBrowser类实现超长网页的截图
在实际的工作中,有时我们需要对一些网页进行截图,一般的网页截图的代码如下(VB2010)   Private Shared Function CaptureWeb(Settings As Object) As Object Dim _Settings As ...
758 0
WebBrowser控件使用详解
方法 说明 GoBack 相当于IE的“后退”按钮,使你在当前历史列表中后退一项  GoForward 相当于IE的“前进”按钮,使你在当前历史列表中前进一项  GoHome 相当于IE的“主...
846 0
+关注
王清培
趣头条 Tech Leader
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载