http://city.qzone.qq.com/html/user/searchpro.htm#mod=0&act=city&nl=3&cd=320100&pg=3上面网址我用了普通的xtml方法没法得到数据,用Inet的post方法也只是得到一对js代码,几乎跟打开看到的页面不相干,用api函数的download和Inet的效果是一样的。用webbroser虽然可以解决问题,但是速度太慢了。各位有没有直接下载页面源代码的方法?为什么xtml用post方法也不行呢?

解决方案 »

  1.   

    当用腾讯浏览器看网页时,点击“文件-另存为:单个文件(*.mht)”,可以把整个网页保存下来。在没上网的时候,可以脱机浏览。请教各位大侠,这一功能用VB编程来实现 
    我用的代码是:
    '引用Microsoft CDO for Windows 2000 Library和microsoft activeX data objects 2.8 library 
    Private Sub Command1_Click() 
        Dim a As New CDO.Message 
        Dim b As ADODB.Stream 
        a.CreateMHTMLBody "http://www.****.com", cdoSuppressNone, "", "" 
        Set b = a.GetStream 
        b.SaveToFile "c:\1.mht" '保存到C盘,生成1.mht文件 
        MsgBox "OK" 
    End Sub 
      

  2.   

    Private Sub Command1_Click()
        Dim a As New CDO.Message
        Dim b As ADODB.Stream
        a.CreateMHTMLBody "http://city.qzone.qq.com/html/user/searchpro.htm#mod=0&act=city&nl=3&cd=320102", cdoSuppressNone, "", ""
        Set b = a.GetStream
        b.SaveToFile "c:\1.mht"
        MsgBox "OK"
    End Sub这个方法不行啊,最后保存的页面打开后右下部分是空白,好像那个翻页的部分是Ajax的,非普通页面。
      

  3.   

    With CreateObject("InternetExplorer.Application")
        .Navigate "http://city.qzone.qq.com/html/user/searchpro.htm#mod=0&act=city&nl=3&cd=320100"
        Do Until .ReadyState = 4
            DoEvents
        Loop
        s = .Document.documentElement.outerHTML
        .Quit
    End With
      

  4.   

    Private Sub Form_Load()
    Dim IEobj As Object
    Dim Vdoc As ObjectSet IEobj = CreateObject("InternetExplorer.Application")
     IEobj.Navigate "http://city.qzone.qq.com/html/user/searchpro.htm#mod=0&act=city&nl=3&cd=320100"
    Set Vdoc = IEobj.document
    Text1 = Vdoc.body.innerHTML
    End Sub
      

  5.   

    楼上两位谢谢了,这个其实跟用webbroser没什么区别,都是用的iefrmae.dll这东西,navigat的时候会因为会将图片都下载下来,样式都作用,所以速度很慢,应该有直接的方法的,我根据抓包的内容,将reference都设置了,甚至将cookie也放进去了,为什么innet就是不能正常工作?
      

  6.   

    '速度还可以
    Sub DownFile(URL As String)
            Dim bytes() As Byte
           bytes() = Inet1.OpenURL(URL, icByteArray)        Dim fName As String
            fName = "123.TXT"        '   保存在C盘下
                   Open "C:\" & fName For Binary Access Write As #1
                    Put #1, , bytes()
            Close #1
    End SubPrivate Sub Form_Load()
    DownFile "http://city.qzone.qq.com/html/user/searchpro.htm#mod=0&act=city&nl=3&cd=320100&pg=3"End Sub
      

  7.   

    老张,谢谢你的关注,上面那个其实得到的也仅仅是js脚本,跟我用Inet1.Execute "http://city.qzone.qq.com/html/user/searchpro.htm", "POST", "mod=0&act=city&nl=3&cd=320100&pg=3", "Content-Type: application/x-www-form-urlencoded"的效果是一样的。我抓了下包发现右下部分,也就是主要数据区,是在页面加载进来好最后做的,是由页面事件触发,所以下载是不会下载到代码的,获取关键数据时抓到的包如下:
    GET /json.php?mod=sososearch&act=page&type=city&jsontype=str&callback=searchProCb&nl=3&cd=320100&pg=2 HTTP/1.1
    Accept: */*
    Referer: http://city.qzone.qq.com/html/user/searchpro.htm
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; AhnLab:APG=2^396822333^22;; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; TheWorld)
    Host: city.qzone.qq.com
    Connection: Keep-Alive
    Cookie: randomSeed=4293841; save_tips=1; adSP=SAxRoVctJSL4dNhzC+OoUSq6r+zwdM9rNU5XjQv4Lw0=_8652_326830_1252676665_; adVer=1777; ac=1,006,006; o_cookie=171977759; pvid=8859942750; flv=10.0; r_cookie=982132854913; pt2gguin=o0171977759; ptcz=ec0054fc17f7b564c57b7bd61897f0b7f9b59d6e1418f3c8693f0cf40d89ebd3; icache=GLACBFAAF; avid=mnW13exIprbp6ReCdRs1SGFh+KkcYsydF9IuWUWX6CSjbK0XV/TtWe+0w3j+8OP4UbiKSJPely0=; randomSeed=8204184; gkey=WIb0wSUxRJx56u44HRUadw7WJE8OLMGeIh53rzTFubtOqPAxtRrBI1irHZQJcIv%2F; SortType=1; comment_skey=a87fdf9e432312a09c5f6280d1c1f813; comment_uin=385762552 sysdzw; ispai2_65593220=2; ispai2_275309361=2; uin_cookie=171977759; euin_cookie=AQAYCpnKn16lEncQtm+XXX6hbTtjnrIKowcaGAAAAADO5balLxaoGPRwe6eIYHmbT+WRUQ==; ssid=s434750928; qzone_city_key=RP%3D1收到的信息: 返回代码:0x00000000
    HTTP/1.1 200 OK
    Date: Sat, 12 Sep 2009 16:55:26 GMT
    Server: Apache
    Set-Cookie: zzpaneluin=deleted; expires=Fri, 12-Sep-2008 16:55:25 GMT; path=/; domain=qq.com
    Set-Cookie: zzpanelkey=deleted; expires=Fri, 12-Sep-2008 16:55:25 GMT; path=/; domain=qq.com
    Set-Cookie: uin=deleted; expires=Fri, 12-Sep-2008 16:55:25 GMT; path=/; domain=qq.com
    Set-Cookie: skey=deleted; expires=Fri, 12-Sep-2008 16:55:25 GMT; path=/; domain=qq.com
    Cache-Control: max-age=300, max-age=600
    Expires: Sat, 12 Sep 2009 17:05:26 GMT
    Vary: Accept-Encoding
    Content-Encoding: gzip
    Content-Length: 2271
    Connection: close
    Content-Type: application/x-javascript; charset=utf-8然后我继续用Inet的Execute方法,设置url、发送数据、引用页等,然后post,结果却还是不包含主要数据(qq号码、昵称、头像URL等信息),解码后如下:
    searchProCb(showSrchResult({"responseHeader": {"status":"0","QTime":"8"},"response": {"numFound":"10000000","currentNum":"10000","results":[],"CorrectPin": [],"SimilarWords": []}}););跟直接下载这个网址的效果是一样的,http://city.qzone.qq.com/json.php?mod=sososearch&act=page&type=city&jsontype=str&callback=searchProCb&nl=3&cd=320100&pg=2,也就是说post过去服务器并没有认可。
      

  8.   

    直接从IE的--查看--源文件--另存为--得到的源文件和上面10楼方法得到的源文件大小是一样的,都是57Kb,对照下内容也一模一样,是不是你在得到的是网页的全部资源包括动画\图片\文字\……所有的一切?
      

  9.   

    老张,谢谢你的回答,右击查看源代码那个没用的,仅仅是原始文件,其实webbroser的navigate后它又做了点事情,也就是将画面右下部分的人员列表显示出来,其实我要的就是这些人员信息,你可以试下,用浏览器打开这个网址,然后右边随便找个人在昵称上右击选择属性,然后里面有个qq号码,复制下来,然后再右击选择“查看源文件”,在那个里面搜索刚才复制的内容,显然是搜索不到的。 如果用webbroser打开,再用其document.body.innerhtml是可以得到的,所以两者是不同的。
    实质是因为,右下部分的一大片数据是通过一系列js脚本执行的结果,这部分脚本执行时(点击下一页下一页的时候)跟服务器通讯时传递的也就是那么几个参数,然后得到json这个文件的内容,但是用Inet模拟出一样的环境却得不到数据,我在11楼已经详细描述了下。