哈喽,哈喽,大家好!大家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的格式,那类似这样的数该怎么去解析呢?关注我,以后给大家慢慢讲。
好了,大家可以去试一下了。