设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 5418|回复: 14
打印 上一主题 下一主题

[模块/函数] 【Access小品】一网打尽---从网页快速提取数据

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-26 21:00:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 todaynew 于 2012-8-26 21:13 编辑

  周末闲来无事,研究了一下WebBrowser控件。很久之前记得红尘同志做过一个天气预报的窗体,前不久海峰同志在解决一个版友的提问时也处理过类似问题。当时感到有些新奇,但没有做深入的研究。最近在做.NET方面的学习,一直觉得用ASP.NET解决网页方面的问题,较之ACCESS来得更为容易一些,便觉得犯不着在Access上折腾与网页有关的问题。今天仔细在网上找了一些与WebBrowser控件有关的资料,觉得可以通过这个控件做一些与网页相关的应用。于是便决定写此例,初步揭示窗体嵌入网页并提取网页数据方面的应用。

  这个示例以OFFICE中国论坛的Access常规交流版面为数据提取对象,提取论坛的文贴标题及其链接地址。处理这个问题有这么几个要点:

  1、要在窗体上添加一个WebBrowser控件;

  2、需要添加两个引用:Microsoft HTML Object Library和Microsoft Internet Controls

  3、需要用到WebBrowser控件的DocumentComplete事件。注意这个事件在WebBrowser控件属性中是找不到的,可以直接在VBa设计视图下直接书写:Private Sub WebBrowser0_DocumentComplete(ByVal pDisp As Object, URL As Variant)

  4、对提取的目标网页进行分析找出提取的规律。方法是右击网页,点击“查看源文件”,在打开的源文件代码中找到要提取对象的一些特定的属性,比如class属性或者id属性等。在OFFICE中国论坛的Access常规交流版面的html代码中class设置为“xst”的a标签就是我们要提取的数据。我们只要遍历具有这个特征的a标签,并提取它们的innerText和href就完成任务了。

  除了这个示例所示的应用外,通过WebBrowser控件及vba代码甚至可以做出编写网页的功能来,所以其应用的方面应该十分广泛,对WebBrowser控件有兴趣的版友可以查看以下地址:http://z.book118.com/009jiaoyuzi ... %C3%BC%BC%C7%C9.htm

Private Sub WebBrowser0_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Dim doc As IHTMLDocument6
    Dim a_tags As IHTMLElementCollection
    Dim a_tag As HTMLAnchorElement
    Dim txt As String, strhref As String
    Dim ssql As String
    Dim m As Long
    Set doc = Me.WebBrowser0.Document
   
    If InStr(URL, "http://www.office-cn.net/forum-2") > 0 Then
        Set a_tags = doc.all.tags("a")
        m = 0
        For Each a_tag In a_tags
            If a_tag.className = "xst" Then
                txt = a_tag.innerText
                strhref = a_tag.href
                If DCount("*", "文贴表", "标题='" & txt & "'") = 0 Then
                    ssql = "insert into 文贴表 (标题,地址) values ('" & txt & "','" & strhref & "')"
                    CurrentDb.Execute ssql
                    m = m + 1
                End If
            End If
        Next a_tag
        Me.文贴子窗体.Form.Requery
        MsgBox "已自动提取 " & m & " 条记录!"
    End If
End Sub



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +1 收起 理由
风中漫步 + 1

查看全部评分

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享分享 分享淘帖1 订阅订阅
2#
发表于 2012-8-26 21:08:16 | 只看该作者
Web Browser控件还有click,submit等等方法,可以通过这些方法,实现网页grid控件的翻页,提交按钮的点击等等功能.之前曾经做过一次中国药品网的药品资料提取,100多万的记录,全部是用grid控件显示,总共有几千页,通过代码自动一页一页的自动下载下来.
3#
发表于 2012-8-26 22:32:44 | 只看该作者
如果使用TeleportPro的话,进行整站拷贝到硬盘,浏览速度超快
4#
发表于 2012-8-27 03:53:26 | 只看该作者
Dim doc As IHTMLDocument6
这句提示“用户定义类型未定义”
更换为“Dim doc As MSHTML.HTMLDocument”就没有提示了

点击这里给我发消息

5#
发表于 2012-8-27 08:57:05 | 只看该作者
真的不错,我也做过这样傻事,呵呵。

http://z.book118.com/009jiaoyuzi ... %C3%BC%BC%C7%C9.htm

还真的全面!

谢了!
6#
 楼主| 发表于 2012-8-27 11:16:14 | 只看该作者
xxfwajj84 发表于 2012-8-27 03:53
Dim doc As IHTMLDocument6
这句提示“用户定义类型未定义”
更换为“Dim doc As MSHTML.HTMLDocument”就 ...

IHTMLDocument6可降低为IHTMLDocument3等试试
7#
发表于 2012-8-30 16:32:35 | 只看该作者
真是好东西,收藏了
8#
发表于 2013-11-2 15:28:07 | 只看该作者
http://z.book118.com/009jiaoyuzi ... %C3%BC%BC%C7%C9.htm已经失效了。

我用excel的webbrowser做了个采集搜房、58和赶集词源的程序,界面难看,代码感觉挺雍肿,来看看你这个
9#
发表于 2013-11-2 15:43:35 | 只看该作者
本帖最后由 软件下载 于 2013-11-2 15:44 编辑

网站已经改版,我帮你修改了一段代码,现在能正常采集了。
请把下面这段代码替换源代码中的过程

修改处有2个:一是if instr(url...)后面的网址域名有变化。
二是classname多了个“S ”
Private Sub WebBrowser0_DocumentComplete(ByVal pDisp As Object, URL As Variant)

    Dim doc As IHTMLDocument6
    Dim a_tags As IHTMLElementCollection
    Dim a_tag As HTMLAnchorElement
    Dim txt As String, strhref As String
    Dim ssql As String
    Dim m As Long
    Me.Text9 = WebBrowser0.LocationURL
    Set doc = Me.WebBrowser0.Document
    If InStr(URL, "http://www.office-cn.net/forum-2-1") > 0 Then
   ' MsgBox URL
        Set a_tags = doc.all.tags("a")
        m = 0
      '  Debug.Print a_tags
        For Each a_tag In a_tags
            If a_tag.className = "s xst" Then
                txt = a_tag.innerText
                strhref = a_tag.href
                If DCount("*", "文贴表", "标题='" & txt & "'") = 0 Then
                    ssql = "insert into 文贴表 (标题,地址) values ('" & txt & "','" & strhref & "')"
                    CurrentDb.Execute ssql
                    m = m + 1
                End If
            End If
        Next a_tag
        Me.文贴子窗体.Form.Requery
        MsgBox "已自动提取 " & m & " 条记录!"
    End If
End Sub

10#
发表于 2013-11-15 09:19:39 | 只看该作者
版主好东西真多,再看一遍还有收获,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-6 19:52 , Processed in 0.101471 second(s), 38 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表