头条创作挑战赛# 在Excel VBA中,HTMLDOMTextNode对象是HTML文档对象模型(DOM)中的一个对象,它代表HTML文档中的文本节点。文本节点是HTML文档中的一种节点类型,它包含纯文本内容,例如段落中的文字或标题中的文字。通过访问HTMLDOMTextNode对象,可以获取和修改HTML文档中的文本内容。
当操作HTML文档时,HTMLDOMTextNode对象是非常有用的。以下是6个Excel VBA代码示例,演示了如何使用HTMLDOMTextNode对象:
1、获取文本节点的文本内容
Set objTextNode = objHTMLDoc.getElementById("text")
strTextContent = objTextNode.innerText
2、修改文本节点的文本内容
Set objTextNode = objHTMLDoc.getElementById("text")
objTextNode.innerText = "New text content"
3、查找包含特定文本的文本节点
Set objTextNodes = objHTMLDoc.getElementsByTagName("p")
For Each objTextNode In objTextNodes
If InStr(objTextNode.innerText, "search phrase") > 0 Then
' Do something with the text node
End If
Next objTextNode
4、在文本节点中插入新的文本
Set objTextNode = objHTMLDoc.getElementById("text")
objTextNode.insertData 5, " new text "
5、替换文本节点中的文本
Set objTextNode = objHTMLDoc.getElementById("text")
objTextNode.replaceData 5, 3, "new"
6、删除文本节点中的文本
Set objTextNode = objHTMLDoc.getElementById("text")
objTextNode.deleteData 5, 3
在使用HTMLDOMTextNode对象时,需要注意以下几个方面:
1、获取文本节点对象时,要确保该节点是存在的。如果节点不存在,尝试访问其属性或方法可能会导致运行时错误。
2、修改文本节点的内容时,要确保新内容不会破坏HTML文档的结构。例如,在文本节点中添加HTML标记可能会导致解析错误。
3、在处理包含多个文本节点的HTML元素时,需要注意它们之间的空格字符。在某些情况下,空格字符可能会被视为文本节点的一部分,从而影响文本内容的处理。
4、在查找包含特定文本的文本节点时,要注意搜索条件的准确性。如果搜索条件不准确,可能会返回不正确的结果。
5、在插入、替换或删除文本时,要确保操作的位置和长度是正确的。如果位置或长度不正确,可能会导致文本内容的破坏。
总之,在使用HTMLDOMTextNode对象时,需要对HTML文档的结构和内容有一定的了解,并且要谨慎处理文本内容,以避免出现错误。
tmlProject对象代表了一个HTML项目。HTML项目是一个包含了HTML文件、脚本和样式表等资源的项目。通过HtmlProject对象,可以访问和操作HTML项目中的各种元素,比如HTML文件、脚本和样式表等。可以通过HtmlProject属性来获取当前活动工作簿中的HtmlProject对象。
以下是5个代码实例来说明HtmlProject对象的使用:
1、获取活动工作簿中的HtmlProject对象:
Dim htmlProj As HtmlProject
Set htmlProj = ThisWorkbook.VBProject.References.Item("HTMLProject").HtmlProject
2、在HTML项目中添加一个新的HTML文件:
Dim htmlFile As HtmlFile
Set htmlFile = htmlProj.AddHtmlFile("NewFile.html")
htmlFile.CodeModule.AddFromString "<html><body><h1>Hello, World!</h1></body></html>"
3、在HTML项目中添加一个新的脚本文件:
Dim scriptFile As ScriptFile
Set scriptFile = htmlProj.AddScriptFile("Custom.js")
scriptFile.CodeModule.AddFromFile "C:\path\to\Custom.js"
4、在HTML项目中添加一个外部样式表文件:
Dim styleSheetFile As StyleSheetFile
Set styleSheetFile = htmlProj.AddStyleSheetFile("styles.css")
styleSheetFile.CodeModule.AddFromString "body{background-color:lightblue;}"
5、遍历HTML项目中的所有HTML文件并显示它们的名称:
Dim htmlFile As HtmlFile
For Each htmlFile In htmlProj.HtmlFiles
Debug.Print htmlFile.Name
Next htmlFile
这些代码示例展示了如何使用HtmlProject对象来操作HTML项目中的不同元素,包括HTML文件、脚本文件和样式表文件等。
在使用HtmlProject对象时,需要注意以下几点:
1、引用:使用HtmlProject对象之前,需要确保已经引用了“Microsoft HTML Object Library”。在VBA编辑器中,通过依次点击“工具”->“引用”,然后勾选“Microsoft HTML Object Library”来添加引用。
2、可用性:HtmlProject对象只能在包含有HTML项目的工作簿中使用。如果工作簿中没有HTML项目,那么访问HtmlProject对象将会导致错误。
3、资源:HtmlProject对象代表了一个包含了HTML文件、脚本和样式表等资源的项目。在使用HtmlProject对象之前,需要确认相关资源已经存在,并且对它们进行正确的引用和操作。
4、方法和属性:HtmlProject对象提供了一些方法和属性,用于访问和操作HTML项目中的各种元素。在使用这些方法和属性时,需要仔细阅读相关文档并遵循正确的语法和用法。
5、错误处理:在使用HtmlProject对象时,可能会遇到各种错误情况,比如资源不存在或者操作失败等。为了避免程序异常终止,需要适当地添加错误处理代码,以捕获和处理可能发生的错误。
总之,使用HtmlProject对象需要确保正确的引用和环境,并且了解相关的方法和属性,以确保能够正确访问和操作HTML项目中的元素。
分享成果,随喜正能量】人的一生,肯定会遭遇各种挫折与挑战,莫大的压力会让你喘不过气。可是,只有真正懂得适时弯腰的人才能得以克服危机,赢得胜利。这不是懦弱,也不是没骨气,而是一种大智慧。强干、蛮干,只会带来不可必要的损失。
《VBA信息获取与处理》教程是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,八十四讲。今日的内容是专题六“VBA中利用XMLHTTP完成网抓数据”的第3讲:VBA网抓数据结果的链接
在上一讲中我们实现了利用XMLHTTP的方法抓取了搜索关键词的数据,但是我们在网络查询的时候,往往不仅需要总的数据支持,还需要一些具体的数据,比如:查找到了哪些网址,标题是什么?如果我需要进一步的查看往往要需要打开的链接。这种数据如何抓取呢?这讲我就来实现这个问题。
实现的场景:如下图当我们点击右侧的按钮“利用VBA提取搜索关键词的数据,并给出下载的链接”时能够在下面的数据区域给出查询到的结果。
其实,这种处理也是工作中经常遇到的,可以对于我们浏览的网页进行适当的保存,在需要的时候再详细的查询。特别是把这些数据保存在EXCEL表格中,更让管理条理清晰。那么如何实现这个场景呢?我们仍是利用XMLHTTP来完成我们的工作。
我们先模拟一下直接在网页上查询数据,当我们输入一个数据点击回车的时候,服务器会反馈回数据在我们的浏览器上,我们需要对网页的源代码进行分析,
上面的截图就是我录入“VBA语言专家”点击回车后的在后台看到的源代码,你会发现,所有我们要写入EXCEL表格的信息都出现在了这里。
其中“标题”可以用innerText属性来获得,链接可以用href的属性来获得,真的非常容易,下面我们就要实现把多页查询的结果填到excel表格中,这个时候我们利用发送给服务器时要求头部检查一下查询的时间即可如下代码:.setRequestHeader "If-Modified-Since", "0"
这样就可以实现我们的要求了。
下面我们把上面的思路转换为代码,如下所示:
Sub myNZA() '利用VBA提取搜索关键词的数据,并给出下载的链接
【具体见教程】
End Sub
代码截图:
代码讲解:
1) Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
Set objDOM = CreateObject("htmlfile")
上述代码建立了两个引用,一个是XMLHTTP ,一个是htmlfile ,之后将利用这两个引用完成我们的工作。
2)UU = Range("B1").Value 这是我们要查询的关键数据
3)For i = 0 To 50 Step 10 '五页 这是要查询5次利用i作为查询的页码
4) strURL = "https://www.baidu.com/s?"
strURL = strURL & "wd=" & UU
strURL = strURL & "&pn=" & i
上述代码是完成了我们要查询的请求URL。
5) .Open "GET", strURL, False 使用OPEN 方法
6) .setRequestHeader "If-Modified-Since", "0" 请求头部把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较,以保障我们每次请求到的数据是没有重复的。
7) .send 注意请求头部的提交要在此命令之前完成
8)objDOM.body.innerHTML = .responseText '将.responseText内容写入新objDOM对象的body
9) For Each objTitle In objDOM.getElementsByTagName("h3") 在每个H3标签即标题进行遍历操作。注意<h1> 到 <h6>是标签标题。<h1> 定义最大的标题。<h6> 定义最小的标题。
10)With objTitle.getElementsByTagName("a")(0) 对于每个属性名称为为“a”的元素
11)Cells(k, 2) = .innerText
Cells(k, 3) = .href
提取标签之间的纯文本信息和链接
12)Set objXMLHTTP = Nothing
Set objDOM = Nothing
Set objTitle = Nothing
回收内存。
我们先来看看当我们点击运行按钮后的实现效果:
此时我们任意点击一个单元格的链接,就会转跳到下面的页面:
从而实现了我们最初的课题要求。
本节知识点回向:如何利用XMLHTTP反馈网页中的关键词的搜索结果和网页的链接?
本讲参考程序文件:006工作表.XLSM
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:
*请认真填写需求信息,我们会在24小时内与您取得联系。