也网上玩了很久了,一直是学习或者查看大佬们的编辑程序或者的编辑方法,今天自己动手来实现自己的自力更生,解决自己在生活或者工作中遇到的问题,借助网络和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编辑界面。
插入一个新模块,把上面代码粘贴进去。
修改url
和keyword
变量为你的实际需求。
关闭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">
标签内的内容,如你的情景不同,请根据自己的网页结构(比如div
,p
标签或者不同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
作者郑重声明,本文内容为本人原创文章,纯净无利益纠葛,如有不妥之处,请及时联系修改或删除。诚邀各位读者秉持理性态度交流,共筑和谐讨论氛围~
暂无评论内容