vba抓取网页数据

发布时间:2024年01月02日

哈喽,哈喽,大家好!大家2024发大财啦!

不知道,平时大家爱不爱看电影呢?从今年的贺岁档的拍片来看,今年的电影还挺多,而且国产优秀电影居多,元旦假期期间我也去看了部喜剧片,应该说在2023的年度还能看到一部优秀的国产喜剧片,还是挺开心的。大家看到这里是不是觉得走错频道了?难道我要来讲电影了?不,我们今天来讲讲怎么抓取网页上的数据。

既然,我们要讲抓取数据,那我们就需要找一个网站来测试,刚好,豆瓣也是平时我比较爱逛的一个网站,那我们就来爬一下电影的数据,这里我们不可以爬所有电影的数据,刚好豆瓣有一个榜单,叫豆瓣电影TOP250,那我们就来把上面的数据都取下来。

01、查看网页

这次我们先不急着上手操作,我们先来看一下网站:豆瓣电影 Top 250

打开后,我们按一下F12,查看一下网站的源码

在这里我们可以看到相应的电影名,我们一个个往下去找的话,其他的电影名称也都是这个span中,至于这个span元素是什么意思,这个可以大家去查找一个,这里我们就不多说了。接着往下看的话,我们可以看到这个span中class都是“Title”,那按照这个发现,我们就可以来写代码了。

02、建表

我们先在access当中创建一个表,如下图:

这里,我们先取电影名称与评分,后期有时间,我们可以来完善一下,抓取电影的简介、导演、演员等信息。

03、创建窗体

接着,我们创建窗体,我们将表做成一个明细子窗体,在窗体上放一个按钮。

04、添加代码

最后,我们就可以来添加代码了,注意,这里需要引用一下"Microsoft HTML Object Library"


Private Sub Command0_Click()
    ' 设置要抓取的豆瓣电影页面
    Dim strSQL As String
    Dim rst As DAO.Recordset
    Dim url As String
    url = "https://movie.douban.com/top250"
    
    ' 创建一个 HTTP 对象
    Dim http As Object
    Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
    
'    ' 发送 HTTP 请求
'    http.Open "GET", url, False
'    http.Send
   
    Dim html As New MSHTML.HTMLDocument
    
    Dim gCount As Long
    Dim p As Long
 
    gCount = 250
    For p = 0 To gCount - 1 Step 25
        url = "https://movie.douban.com/top250?start=" & p
'        Debug.Print url
        http.Open "GET", url, False
        http.Send
        html.body.innerHTML = http.ResponseText
        Dim i As Long
        For i = 0 To html.getElementsByClassName("hd").length - 1
            Set rst = CurrentDb.OpenRecordset("T_豆瓣电影TOP250")
            rst.AddNew
            rst!电影名称 = html.getElementsByClassName("hd")(i).innerText
            rst!评分 = html.getElementsByClassName("rating_num")(i).innerText
            rst.Update
            
        Next i
    Next p
    MsgBox "抓取成功。", vbInformation
    Me.Child1.Requery
End Sub

代码比较简单,其实就是用getElementsByClassName()方法,找到相应的类名,然后把相应的数据取过来。

05、运行测试

最后,我们就可以运行测试一下了,这里我们可以看到250条数据都取到了。

这里抓取数据,我们是利用网页上的元素,那有些网页是以Json的格式,那类似这样的数该怎么去解析呢?关注我,以后给大家慢慢讲。

好了,大家可以去试一下了。

文章来源:https://blog.csdn.net/weiisiceman/article/details/135341434
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。