首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

到现在为止最完美的VB网页采集方案(附核心代码)

2012-12-23 
迄今为止最完美的VB网页采集方案(附核心代码)好久没有上csdn了,最近工作还是非常忙,对不住XDJM们了最近一

迄今为止最完美的VB网页采集方案(附核心代码)
好久没有上csdn了,最近工作还是非常忙,对不住XDJM们了
最近一直在编写一款电影管家程序,其中有个功能就是:
用户输入一个关键字(一般是电影名),然后程序就自动到某网站(保密,免得被河蟹)采集所需的数据,其实就是用代码去下载网页源码,然后要么正则,要么直接字符串数组解析。
现在最最难的地方就是:这个电影网站是Ajax构架的,网页源码用常规方法直接获取的话,根本得不到完整的源码或者能得到处理起来也繁琐(Webbrowser控件),动态加载的部分还在娘胎里呢
注:
一般的得网页源码常规方法:
1.Inet控件(得不到完整源码)
2.Webbrowser控件(可以得到,但是处理繁琐,老是判断不好是否完全加载)
3.Winsock控件(得不到完整源码)
4.XmlHtpp组件(得不到完整源码)
5.API直接下载远程网页(一样得不到完整源码)
6....

好了,废话不多说了,那怎么样既能得到完整我源码,又处理起来非常方便呢?
我在网上也找了好久好久了,百度、谷歌...都没能找到有效的解决方案,今天突然直接灵感一现,想到了一种目前算非常完美的解决方法。既然Webbrowser控件能加载完整的源码,那我自然就想到了咱们每天在用的IE浏览器了(我现在用的是谷歌浏览器Chrome)
我们的IE和Webbrowser有着相当紧密的联系,具体多紧密那就要问问微软了,有木有?
用com对象动态创建技术,即可在VB程序中创建一个IE,然后访问需要的网址,等待加载完毕,然后就可以十分方便地得到完整的源码,是不是很诱人啊?呵呵...
现在给出核心源码:


Function GetFullHtml(vURL As String) As String
    
    Dim ie As Object
    Dim element As Object
    
    Set ie = CreateObject("InternetExplorer.Application")
    
    With ie
        .Visible = False
        .navigate vURL
        Do Until .Readystate = 4
            DoEvents
        Loop
        GetFullHtml = .Document.body.innerhtml
    End With

    Set ie = Nothing
    
End Function


呵呵,怎么样?以上简短的代码几乎可以解决所有网页源码的下载难题!最重要的是:它可以突破Ajax!
好了,诚接板砖中...

[最优解释]
引用:
ie8下测试,很多时候状态不是4,导致死循环。

那段"核心"代码N多年前就曾被用烂了的,会产生问题。你说的这个情况就是最致命的缺陷之一。它用来做一些外部登录大网站的信箱之类的小软件还可以,因为大网站通常不会产生意外状况造成死循环。这也是我说LZ很幽默的原因,呵呵。

其实,抓取其他网页内容,最可靠的还是微软的xmlhttp组件,后来被WEB开发的客户端发扬光大称之为AJAX。
而且对于小偷程序难搞的也正是页面加载完成后采用AJAX读取某些文件填充到网页的指定板块。遇到这种情况,只有使用工具追踪客户端AJAX指向的网址,继续用XMLHTTP提取,基本可以避免跨域问题出现。
[其他解释]
楼主的代码真的可行么?有些是页面打开后十几秒后才开始执行的一段ajax的,延时是通过js来的。
[其他解释]
思路不错.

顶顶.
[其他解释]
ie8下测试,很多时候状态不是4,导致死循环。
[其他解释]
获得了网页,还需要判断charset,然后进行编码转换。
[其他解释]
太消耗资源了。
[其他解释]
楼主这贴应该发到非技术区去,真幽默。。。
[其他解释]
收藏一下
赞扬楼主高风亮节
[其他解释]
幽默贴,确实应转非技术区,呵呵
[其他解释]
mark 楼主高风亮节 
[其他解释]
直接用webbrowser跟这个有什么区别???不明白。。还没有webbrowser方便
[其他解释]
我当是什么呢,白瞎了


[其他解释]
锅来蹭点非技术分……
------其他解决方案--------------------


确实经常会陷入死笔循环中,呵呵!
[其他解释]
顶了再说 
[其他解释]

引用:
引用:

ie8下测试,很多时候状态不是4,导致死循环。

那段"核心"代码N多年前就曾被用烂了的,会产生问题。你说的这个情况就是最致命的缺陷之一。它用来做一些外部登录大网站的信箱之类的小软件还可以,因为大网站通常不会产生意外状况造成死循环。这也是我说LZ很幽默的原因,呵呵。

其实,抓取其他网页内容,最可靠的还是微软的xmlhttp组件,后来被……

的确如此,个人认为还是xmlhttp最靠谱,而且速度应该也快些。
[其他解释]
阿贵归来,先顶一下.
不同的网页会有不同的方法.
[其他解释]
沙发岂可拱手让人?
[其他解释]
引用:
太消耗资源了。

嗯,是块好砖!呵呵,不过,下载网上资源,又不耗的资源的,恐怕不多,呵呵
[其他解释]
引用:
引用:

太消耗资源了。

嗯,是块好砖!呵呵,不过,下载网上资源,又不耗的资源的,恐怕不多,呵呵

再怎么耗,也跟你开个网页卡得差不多。呵呵
[其他解释]
忘记说了,上面的代码可以用到ASP采集上!(使用前确认你的服务器安装了ie,并且支持你的调用)
[其他解释]
引用:
楼主这贴应该发到非技术区去,真幽默。。。

此话怎讲?
[其他解释]
引用:
思路不错.

顶顶.

谢谢老马来捧场
[其他解释]
本人用过Inet和API方式,但都有问题。
[其他解释]
结贴
[其他解释]
引用:
确实经常会陷入死笔循环中,呵呵!


........
[其他解释]
过来学习一下,还看得不太懂...
[其他解释]
不过,无论怎么样,上头的代码确实是我目前在用的自己认为最好的代码了。其它的都不行。

热点排行