网页分页数据抓取的几种方式 之 第三种方式

  前两天写了关于网页分页数据抓取的帖子,但只提到了两种方式,因为当时原创的帖子打字真的很辛苦,所以第三种方式没有写,今天将第三种方式也贴出来,和大家分享一下;

   前面的帖子已经提到了,第三种方式是用代码模拟手动翻页,这种方式应该可以处理任何形式的翻页数据,原理就是,用代码模拟人工点击翻页链接,用代码一页一页的翻页,然后一页一页的抓取。

   正所谓外行看热闹,内行看门道,很多人可能看到这里就会说用Webbrowser这可控件就可以实现,对,我下面的这种方式就是用WebBrowser的这个控件来实现,其实在.net下这种类似的类应该还有,但我没有去研究过,也希望如果有人有其他的方式,可以回复我,与大家一起分享。

  WebBroser控件可是在自己的程序中内嵌一个浏览器,就像IE,火狐之类的一样,你也可以用他开发自己的浏览器,至于用它开发的浏览器的效果怎么样,我觉得肯定是不如IE和火狐了。呵呵

  我们还是 闲言少叙,切入主题:

    使用WebBroser控件基本上可以实现你在IE中操作网页的任何功能,所以点击翻页按钮当然也是可以的了,那既然可以在WebBroser中可以手动点击翻页按钮,自然我们用程序代码同样可以指使WebBroser自动替我们翻页了。

   其实原理很简单,主要分以下几个步骤:

   第一步,打开你想抓取的页面  比如:http://www.zxskb.com/zr/list_O.html 

       调用webBrowser控件的方法Navigate("http://www.zxskb.com/zr/list_O.html");

   此时,你应该在你的WebBrowser控件中看到你的网页信息,和IE中看到的是一样的;

   第二步 ,WebBrowser控件的这个事件DocumentCompleted 很重要,当你访问的页面全部加载完之后,会触发这个事件。所以我们分析页面元素的过程也需要在这个事件内完成

      string _ResponseStr=this.WebBrowser1.Document.Body.OuterHtml;

这句代码可以得到当前打开页面的html元素的内容。

    既然已经得到当前打开页面的html元素的内容了,剩下的工作自然就是解析这个大字符串,得到自己关心的内容,解析字符串的过程,大家应该自己都能写了。

第三步, 重点在这第三步呢,因为要翻页了,接第二步,解析完字符串之后,还是在DocumentCompleted事件中,调用方法

WebBrowser1.Document.GetElementById("页码的id").InvokeMember("click");

从代码的方法名种大家应该能明白了,那么调用完这个方法,之后WebBrwoser控件内的网页就实现了翻页,和你用手去点翻页按钮是一样的效果。

重点在于,翻页之后,还会触发DocumentCompleted事件,所以进入了第二步,第三步的循环了,所以大家需要注意判断跳出循环的时机

 

其实用WebBrowser还能干很多事情,比如自动登录,注销某个论坛,保存session, cockie,所以 这个控件基本上可以实现你想对网页的任何操作,哪怕你是想暴利破解一个网站的登录密码,当然这个是不提倡的了。呵呵

 

这里想和大家说一下 上面那个地址 是我本人的站,正所谓 盗亦有道,请大家不要拿这个技术来抓我的数据,主要是担心我的服务器承受不住太大的压力

另外 我在我的站上添加了一个站长随笔的小功能,我也会定期在我的站上发布一些自己的心得,有兴趣的可以去看看,

这篇分页抓取数据的帖子,就算是我第一个随笔吧,我已将两篇帖子整理后放到我的站上了,

大家有兴趣可以去看看 http://www.zxskb.com/bbs/3.html

 

  同时 本人用delphi也写了一个单机版的火车时刻表查询的小程序,纯绿色的软件,不需要联网,不需要安装,不需要数据库,600k的小程序,直接运行,占内存小

有兴趣的也可以到 http://www.zxskb.com/update/ 下载一下,很适合经常出差 上网有不方便的人士使用

 

有需要抓取数据的 可以联系我 QQ 7132600

  

posted on 2010-05-28 10:02  TimeZ  阅读(1220)  评论(4编辑  收藏  举报

导航