用VBA实现网页内容统计填表的方法

也网上玩了很久了,一直是学习或者查看大佬们的编辑程序或者的编辑方法,今天自己动手来实现自己的自力更生,解决自己在生活或者工作中遇到的问题,借助网络和AI实现自己的需要的VB程序。
下面是整个过程,记录下来,便于后期查看,也为学习做好笔记。

一、程序需求:

告诉AI我的需求情况:“帮我编制一个excel的VB程序,要求:VBA操作网页读取指定的文字,统计的相关数据自动填入EXCEL表中”发给AI,让她帮我实现程序的比较和修改。

二、整个人机交流过程:

☆ 第一次交流:

当然可以!下面帮你设计一个简单的Excel VBA宏,能够:

打开一个网页
读取指定的网页内容(比如指定标签里的文字)
把统计结果自动写入Excel表格

基础说明

VBA操作网页主要通过InternetExplorer对象(IE控件),但注意现代IE已不推荐,很多新网站或win10以上系统可能用不了,有时可以考虑MSXML2.XMLHTTP(只获取源码,不执行JS)。
本例用IE控件方法示范,可改为XMLHTTP方式。
假设你需要统计某网页内所有<span class="target">xxx</span>标签的文字出现次数。


步骤一:添加引用

在VBA编辑器中,点击【工具】-【引用】,勾选:

Microsoft Internet Controls
Microsoft HTML Object Library


步骤二:VBA示例代码

Sub 网页内容统计并写入表格()

    Dim IE As Object
    Dim HTMLDoc As Object
    Dim Element As Object
    Dim url As String
    Dim keyword As String
    Dim count As Integer
    Dim rowNum As Integer
    
    url = "https://你的目标网页.com" '请换成目标网页地址
    keyword = "你要查找的文字"         '请换成要查找的内容
    count = 0
    rowNum = 2  ' Excel从第2行开始写入,默认第1行为表头
    
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = False
    IE.navigate url

    Do While IE.Busy Or IE.readyState <> 4
        DoEvents
    Loop

    Set HTMLDoc = IE.document
    
    '----- 假设寻找所有<span class="target">标签,并读取其.innerText -----
    For Each Element In HTMLDoc.getElementsByTagName("span")
        If Element.className = "target" Then
            ' 如果内容包含关键字
            If InStr(Element.innerText, keyword) > 0 Then
                count = count + 1
                ' 写入Excel
                ThisWorkbook.Sheets(1).Cells(rowNum, 1).Value = Element.innerText
                rowNum = rowNum + 1
            End If
        End If
    Next
    
    ' 在A1写入表头
    ThisWorkbook.Sheets(1).Cells(1, 1).Value = "包含关键字的文字"
    ThisWorkbook.Sheets(1).Cells(1, 2).Value = "总次数"
    ThisWorkbook.Sheets(1).Cells(2, 2).Value = count
    
    IE.Quit
    Set IE = Nothing
    Set HTMLDoc = Nothing
    MsgBox "统计完毕,数据已填入!", vbInformation

End Sub


使用方法

打开Excel,按Alt+F11进VBA编辑界面。
插入一个新模块,把上面代码粘贴进去。
修改urlkeyword变量为你的实际需求。
关闭VBA窗口回Excel,按Alt+F8运行此宏。


拓展建议

如果你要统计不同标签,如<div><p>,可以将getElementsByTagName中的span改为对应标签。
如果你要爬取的数据需要登录、翻页或JS渲染,建议使用更专业的爬虫(如Python的requests+BeautifulSoup,或selenium等),VBA有局限。


如果你有更详细的数据目标(比如具体要统计什么、网页URL等),欢迎补充,我可以帮你更精确地定制代码!

☆ 第二次交流:

将需要查询的内容设计为弹窗方式进行填写: url = “https://你的目标网页.com” '请换成目标网页地址 keyword = “你要查找的文字” '请换成要查找的内容

非常好的建议!下面我帮你把VBA代码改成“弹窗填写”:

程序运行时弹出2个输入框:输入网址和要查找的关键字。
其余功能保持不变。


完整代码如下:

Sub 网页内容统计填表_PromptInputBox()

    Dim IE As Object
    Dim HTMLDoc As Object
    Dim Element As Object
    Dim url As String
    Dim keyword As String
    Dim count As Integer
    Dim rowNum As Integer
    
    ' 弹窗输入网址和关键字
    url = InputBox("请输入要统计的网页URL:", "网站地址")
    If url = "" Then MsgBox "未输入网址,退出程序": Exit Sub
    
    keyword = InputBox("请输入要查找的文字内容:", "查找关键字")
    If keyword = "" Then MsgBox "未输入查找内容,退出程序": Exit Sub
    
    count = 0
    rowNum = 2  ' Excel从第2行开始写入,默认第1行为表头
    
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = False
    IE.navigate url

    Do While IE.Busy Or IE.readyState <> 4
        DoEvents
    Loop

    Set HTMLDoc = IE.document

    '----- 以<span class="target">为例,如有需要请自行调整标签或class名称 -----
    For Each Element In HTMLDoc.getElementsByTagName("span")
        If Element.className = "target" Then
            If InStr(Element.innerText, keyword) > 0 Then
                count = count + 1
                ' 写入Excel
                ThisWorkbook.Sheets(1).Cells(rowNum, 1).Value = Element.innerText
                rowNum = rowNum + 1
            End If
        End If
    Next
    
    ' 在A1写入表头
    ThisWorkbook.Sheets(1).Cells(1, 1).Value = "包含关键字的文字"
    ThisWorkbook.Sheets(1).Cells(1, 2).Value = "总次数"
    ThisWorkbook.Sheets(1).Cells(2, 2).Value = count
    
    IE.Quit
    Set IE = Nothing
    Set HTMLDoc = Nothing
    MsgBox "统计完毕,数据已填入!", vbInformation

End Sub

说明

弹窗输入
程序将弹出输入对话框,可以手工输入网址和查找内容,方便不同场合直接查询。

标签与class
上例查找的是<span class="target">标签内的内容,如你的情景不同,请根据自己的网页结构(比如 divp 标签或者不同class名称)修改:


复制

For Each Element In HTMLDoc.getElementsByTagName("span") If Element.className = "target" Then ' ... End If Next

比如改为查所有<div>标签且class为"news",只要将span"target"分别改为div"news"即可。

不需要网页class筛选怎么办?
只查所有该标签就把class筛查部分去掉:


For Each Element In HTMLDoc.getElementsByTagName("p") If InStr(Element.innerText, keyword) > 0 Then ' ... End If Next


如需帮助进一步调整或针对具体网页结构优化匹配方式,请贴出目标网页的示例结构,我会根据你的情况给出更针对性的代码!

☆ 第三次交流:

查询存在问题,我需要打开的网页,浏览器程序为D:Chromechrome.exe

感谢你的补充!
VBA默认调用的Internet Explorer(IE)已经被淘汰,很多新网站在IE下无法正常使用,尤其如果你希望用Chrome浏览器来实现网页自动化与内容采集。

但是:VBA自身无法直接自动操作Chrome,如果只是打开Chrome浏览器并访问特定页面可以实现,
但要自动读取网页内容,VBA能力有限。如果你的需求只需要打开网页,请见方案A;
如果一定要用Chrome自动读取并统计内容,见方案B(推荐学习下Selenium)。


方案A:VBA 仅调用Chrome打开网页

只能实现用InputBox输入网址,然后调用Chrome打开,不读取网页内容:

Sub OpenUrlWithChrome() Dim url As String url = InputBox("请输入要打开的网址", "输入网址") If url = "" Then Exit Sub Shell """D:Chromechrome.exe"" --new-window """ & url & """", vbNormalFocus End Sub

这种方式只负责打开,不读取内容与统计,不满足你的全文需求。


方案B:用“VBA+Selenium+ChromeDriver”自动控制Chrome,读取内容并统计

操作概要

下载 ChromeDriver (必须与你的Chrome主版本一致):
下载地址
例如放到D:Chromechromedriver.exe

下载并安装 Selenium VBA 库
SeleniumBasic 官方下载页面
解压安装并确保引用了Selenium Type Library

VBA完整代码

假如你要找所有span标签内容里含有某关键字:

Sub Chrome_Selenium_抓网页内容自动填表()
    Dim bot As New WebDriver
    Dim keyword As String
    Dim url As String
    Dim spans As Object
    Dim i As Long
    Dim count As Long
    
    url = InputBox("请输入目标网址", "网址输入")
    If url = "" Then Exit Sub
    
    keyword = InputBox("请输入需要查找的文字", "内容输入")
    If keyword = "" Then Exit Sub
    
    bot.Start "chrome", url
    bot.Wait 5000 ' 适当调整等待时间
    bot.Get url
    
    Set spans = bot.FindElementsByTag("span")
    count = 0
    For i = 1 To spans.Count
        If InStr(spans.Item(i).Text, keyword) > 0 Then
            count = count + 1
            ThisWorkbook.Sheets(1).Cells(count + 1, 1) = spans.Item(i).Text
        End If
    Next i
    
    ThisWorkbook.Sheets(1).Cells(1, 1) = "包含关键字的文字"
    ThisWorkbook.Sheets(1).Cells(1, 2) = "总次数"
    ThisWorkbook.Sheets(1).Cells(2, 2) = count
    
    MsgBox "统计完毕,结果已填入!"
    bot.Quit
End Sub

步骤说明

安装SeleniumBasic和ChromeDriver(非常关键!)

SeleniumBasic会自动注册到VBA里。
你需要把SeleniumBasic的路径及ChromeDriver路径都设置好。

在VBA引用中勾选 Selenium Type Library

工具 > 引用 > Selenium Type Library

如需指定Chrome安装目录:

默认会自动识别Chrome路径,如果有异常见 SeleniumBasic配置说明


总结

仅能用VBA+IE,VBA原生可读取网页内容,但受限网站兼容性极差!
如需用Chrome,请安装SeleniumBasic与ChromeDriver。Selenium可以自动化Chrome并进行网页内容读取和统计,实现你的全部要求。
VBA本身不能直接控制Chrome读取内容,必须借助Selenium扩展。

如需具体的Selenium配置、安装过程指导请继续追问,我可以帮你详细写安装使用教学!

☆ 第四次交流:

需要:

将”内容输入”部分设置为在excel的单元格中选取内容,当选取单元格内容后,程序根据框选单元格中的文字内容在当前网页中提取相应的数据

你的需求是这样的:

在Excel中选中一个单元格(比如A2),A2中写着你要查找的关键字;
运行宏程序后,VBA自动读取A2的内容作为查找关键字,在网页中查找相关内容,并将提取和统计的数据自动填入到Excel表格。

下面以Selenium+ChromeDriver为例,给你详细代码说明。


实现步骤

在Excel的某个单元格(比如A2)写入查找的关键词;
运行宏(可以放一个按钮,或直接Alt+F8运行);
VBA读取A2内容作为查找关键词;
在网页中查找所有包含该关键字的内容并写入Excel。


代码示例(Selenium + Chrome驱动)

环境准备

需安装SeleniumBasic和与你Chrome版本匹配的chromedriver.exe
VBA里勾选 “Selenium Type Library” 引用

代码

Sub 用单元格内容为关键字_抓取网页并写回EXCEL()
    Dim bot As New WebDriver
    Dim keyword As String
    Dim url As String
    Dim spans As Object
    Dim i As Long
    Dim count As Long
    Dim ws As Worksheet
    
    Set ws = ThisWorkbook.Sheets(1)
    
    ' 假设A2为关键字,A1为网址(可自由调整)
    url = ws.Range("A1").Value
    keyword = ws.Range("A2").Value

    If url = "" Or keyword = "" Then
        MsgBox "请在A1输入网址,在A2输入查找的关键字!", vbExclamation
        Exit Sub
    End If
    
    ' 打开网页
    bot.Start "chrome"
    bot.Get url
    bot.Wait 3000 '等待网页加载,视网络情况微调
    
    Set spans = bot.FindElementsByTag("span")
    count = 0

    For i = 1 To spans.Count
        If InStr(spans.Item(i).Text, keyword) > 0 Then
            count = count + 1
            ws.Cells(count + 2, 3).Value = spans.Item(i).Text
        End If
    Next i

    ws.Cells(2, 4).Value = count
    ws.Cells(2, 3).Value = "包含关键字的文字"
    ws.Cells(1, 4).Value = "总次数"
    
    MsgBox "抓取完成,结果填入C列、第3行起!"
    bot.Quit
End Sub

参数说明

A1:输入你的网址

A2:输入查找的关键字

匹配结果写入C列(从C3开始),总次数写入D2。


灵活调整

使用其它标签:

Set spans = bot.FindElementsByTag("p") 查p标签
或:bot.FindElementsByClass("xxx") 查类名

关键字单元格可自行调整,比如 Range("B3")

而且AI还能给出比较好的建议:

如不能用Selenium

如果你确实不能安装Selenium只能用原生VBA(IE控件,适用于极老网站)参照如下:

Sub IE控件单元格抓网页()
    Dim IE As Object
    Dim HTMLDoc As Object
    Dim Element As Object
    Dim url As String, keyword As String
    Dim count As Integer, rowNum As Integer
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(1)
    url = ws.Range("A1").Value
    keyword = ws.Range("A2").Value
    If url = "" Or keyword = "" Then
        MsgBox "A1放网址,A2写关键字": Exit Sub
    End If
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.Navigate url
    Do While IE.Busy Or IE.ReadyState <> 4
        DoEvents
    Loop
    Set HTMLDoc = IE.Document
    rowNum = 3: count = 0
    For Each Element In HTMLDoc.getElementsByTagName("span")
        If InStr(Element.innerText, keyword) > 0 Then
            count = count + 1
            ws.Cells(rowNum, 3).Value = Element.innerText
            rowNum = rowNum + 1
        End If
    Next
    ws.Cells(2, 3).Value = "包含关键字的文字"
    ws.Cells(1, 4).Value = "总次数"
    ws.Cells(2, 4).Value = count
    IE.Quit
    Set IE = Nothing
    Set HTMLDoc = Nothing
    MsgBox "统计完毕!"
End Sub

但IE控件越来越多网站无法使用,推荐Selenium方案。


总结

在A1输入网址,在A2输入查找关键字,运行代码。
程序以A2内容为查找关键字在指定网页中提取数据,写回Excel C列并统计。
推荐用Selenium实现(现代网页),如需详细Selenium配置欢迎继续咨询!

通过人机互动,将你的需求讲出来,尽量讲解的细致一点,AI就能够更贴切的感知你的实际需求,这样就会慢慢熟悉你的思维,也就是所谓的训练AI。当到达一定的训练程度,AI就可以理解你的语言和你的需求。这样就可以事半功倍。尤其对不懂程序的小白更是非常方便,不会因为你问一个小小的问题而遭到AI的白眼和土槽,他会更细致的帮你解答,帮你解决你所需要的问题。真正的成为你的知心朋友。

好了今天闲聊到这里吧!忙了一天了,真的有点困了,我要去补觉了。但愿这样的描述给你带来帮助,也欢迎你将遇到的问题和一些个人的见解和想法在下面留言互动。感谢您的已关注和支持!

💡注意:本文所介绍的软件及功能均基于公开信息整理,仅供用户参考。在使用任何软件时,请务必遵守相关法律法规及软件使用协议。同时,本文不涉及任何商业推广或引流行为,仅为用户提供一个了解和使用该工具的渠道。

你在生活中时遇到了哪些问题?你是如何解决的?欢迎在评论区分享你的经验和心得!

希望这篇文章能够满足您的需求,如果您有任何修改意见或需要进一步的帮助,请随时告诉我!

感谢各位支持,可以已关注我的个人主页,找到你所需要的宝贝。 ​ 
博文入口:https://blog.csdn.net/Start_mswin ​复制到【浏览器】打开即可,宝贝入口:https://pan.quark.cn/s/71742b5e7629 

作者郑重声明,本文内容为本人原创文章,纯净无利益纠葛,如有不妥之处,请及时联系修改或删除。诚邀各位读者秉持理性态度交流,共筑和谐讨论氛围~

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容