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

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

好了,废话不多说了,那怎么样既能得到完整我源码,又处理起来非常方便呢?
我在网上也找了好久好久了,百度、谷歌...都没能找到有效的解决方案,今天突然直接灵感一现,想到了一种目前算非常完美的解决方法。既然Webbrowser控件能加载完整的源码,那我自然就想到了咱们每天在用的IE浏览器了(我现在用的是谷歌浏览器Chrome 迄今为止最完美的VB网页采集方案(附核心代码)
我们的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!
好了,诚接板砖中...

30 个解决方案

#1


迄今为止最完美的VB网页采集方案(附核心代码)沙发岂可拱手让人?

#2


太消耗资源了。

#3


引用 2 楼 sihonglaoren 的回复:
太消耗资源了。

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

#4


引用 3 楼 liguicd 的回复:
引用 2 楼 sihonglaoren 的回复:

太消耗资源了。

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

再怎么耗,也跟你开个网页卡得差不多。呵呵

#5


忘记说了,上面的代码可以用到ASP采集上!(使用前确认你的服务器安装了ie,并且支持你的调用) 迄今为止最完美的VB网页采集方案(附核心代码)

#6


楼主这贴应该发到非技术区去,真幽默。。。

#7


引用 6 楼 wowfiowow 的回复:
楼主这贴应该发到非技术区去,真幽默。。。

此话怎讲?

#8


收藏一下
赞扬楼主高风亮节

#9


幽默贴,确实应转非技术区,呵呵

#10


楼主的代码真的可行么?有些是页面打开后十几秒后才开始执行的一段ajax的,延时是通过js来的。

#11


思路不错.

顶顶.

#12


mark 楼主高风亮节 

#13


引用 11 楼 myjian 的回复:
思路不错.

顶顶.

谢谢老马来捧场 迄今为止最完美的VB网页采集方案(附核心代码)

#14


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

#15


直接用webbrowser跟这个有什么区别???不明白。。还没有webbrowser方便

#16


引用 14 楼 dingyanwei 的回复:
ie8下测试,很多时候状态不是4,导致死循环。

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

其实,抓取其他网页内容,最可靠的还是微软的xmlhttp组件,后来被WEB开发的客户端发扬光大称之为AJAX。
而且对于小偷程序难搞的也正是页面加载完成后采用AJAX读取某些文件填充到网页的指定板块。遇到这种情况,只有使用工具追踪客户端AJAX指向的网址,继续用XMLHTTP提取,基本可以避免跨域问题出现。

#17


锅来蹭点非技术分……

#18


我当是什么呢,白瞎了

#19


顶了再说  迄今为止最完美的VB网页采集方案(附核心代码)

#20


确实经常会陷入死笔循环中,呵呵!

#21


获得了网页,还需要判断charset,然后进行编码转换。

#22


本人用过Inet和API方式,但都有问题。

#23


阿贵归来,先顶一下.
不同的网页会有不同的方法.

#24


引用 16 楼 toury 的回复:
引用 14 楼 dingyanwei 的回复:

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

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

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

的确如此,个人认为还是xmlhttp最靠谱,而且速度应该也快些。

#25


引用 20 楼 i5rdfdg85y 的回复:
确实经常会陷入死笔循环中,呵呵!


........

#26


迄今为止最完美的VB网页采集方案(附核心代码)结贴

#27


不过,无论怎么样,上头的代码确实是我目前在用的自己认为最好的代码了。其它的都不行。 迄今为止最完美的VB网页采集方案(附核心代码)

#28


过来学习一下,还看得不太懂...

#29


迄今为止最完美的VB网页采集方案(附核心代码)如何用VB同时采集5000个地址(翻页采集很慢)联系:qq 403450321

#30


代码收藏了,不过楼主说xmlhttp得不到完整源码,这个是不可能的。还有所谓ajax其实是可以通过截取head信息得到实际内容地址的。xmlhttp我一直在用,很少有不能采集的网页。 迄今为止最完美的VB网页采集方案(附核心代码)

#1


迄今为止最完美的VB网页采集方案(附核心代码)沙发岂可拱手让人?

#2


太消耗资源了。

#3


引用 2 楼 sihonglaoren 的回复:
太消耗资源了。

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

#4


引用 3 楼 liguicd 的回复:
引用 2 楼 sihonglaoren 的回复:

太消耗资源了。

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

再怎么耗,也跟你开个网页卡得差不多。呵呵

#5


忘记说了,上面的代码可以用到ASP采集上!(使用前确认你的服务器安装了ie,并且支持你的调用) 迄今为止最完美的VB网页采集方案(附核心代码)

#6


楼主这贴应该发到非技术区去,真幽默。。。

#7


引用 6 楼 wowfiowow 的回复:
楼主这贴应该发到非技术区去,真幽默。。。

此话怎讲?

#8


收藏一下
赞扬楼主高风亮节

#9


幽默贴,确实应转非技术区,呵呵

#10


楼主的代码真的可行么?有些是页面打开后十几秒后才开始执行的一段ajax的,延时是通过js来的。

#11


思路不错.

顶顶.

#12


mark 楼主高风亮节 

#13


引用 11 楼 myjian 的回复:
思路不错.

顶顶.

谢谢老马来捧场 迄今为止最完美的VB网页采集方案(附核心代码)

#14


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

#15


直接用webbrowser跟这个有什么区别???不明白。。还没有webbrowser方便

#16


引用 14 楼 dingyanwei 的回复:
ie8下测试,很多时候状态不是4,导致死循环。

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

其实,抓取其他网页内容,最可靠的还是微软的xmlhttp组件,后来被WEB开发的客户端发扬光大称之为AJAX。
而且对于小偷程序难搞的也正是页面加载完成后采用AJAX读取某些文件填充到网页的指定板块。遇到这种情况,只有使用工具追踪客户端AJAX指向的网址,继续用XMLHTTP提取,基本可以避免跨域问题出现。

#17


锅来蹭点非技术分……

#18


我当是什么呢,白瞎了

#19


顶了再说  迄今为止最完美的VB网页采集方案(附核心代码)

#20


确实经常会陷入死笔循环中,呵呵!

#21


获得了网页,还需要判断charset,然后进行编码转换。

#22


本人用过Inet和API方式,但都有问题。

#23


阿贵归来,先顶一下.
不同的网页会有不同的方法.

#24


引用 16 楼 toury 的回复:
引用 14 楼 dingyanwei 的回复:

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

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

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

的确如此,个人认为还是xmlhttp最靠谱,而且速度应该也快些。

#25


引用 20 楼 i5rdfdg85y 的回复:
确实经常会陷入死笔循环中,呵呵!


........

#26


迄今为止最完美的VB网页采集方案(附核心代码)结贴

#27


不过,无论怎么样,上头的代码确实是我目前在用的自己认为最好的代码了。其它的都不行。 迄今为止最完美的VB网页采集方案(附核心代码)

#28


过来学习一下,还看得不太懂...

#29


迄今为止最完美的VB网页采集方案(附核心代码)如何用VB同时采集5000个地址(翻页采集很慢)联系:qq 403450321

#30


代码收藏了,不过楼主说xmlhttp得不到完整源码,这个是不可能的。还有所谓ajax其实是可以通过截取head信息得到实际内容地址的。xmlhttp我一直在用,很少有不能采集的网页。 迄今为止最完美的VB网页采集方案(附核心代码)