网页 抓取 innertext 试题(“VBA信息获取与处理”教程中第八个专题(组图))

优采云 发布时间: 2021-09-12 19:06

  网页 抓取 innertext 试题(“VBA信息获取与处理”教程中第八个专题(组图))

  《VBA信息获取与处理》教程第八题“VBA与HTML文档”的第七节“HTML DOM对象事件与关联”太无聊了。希望想要掌握这方面知识的朋友可以参考我的教程学习。今天开始学习第九题《使用IE捕捉网络数据》。

  在我们的网络爬虫部分讲解了XMLHTTP方法之后,我们利用两个主题的进展来讲解一些与VBA不太相关的网络知识。这两个话题对于我们重新认识网络爬虫数据非常重要。重要的意思是,虽然我的解释不全面,但是对于我经常提倡的VBA定位来说已经足够了。此外,学习是一个不断积累和进步的过程。有必要掌握一些基本的理论,然后把这些结合起来应用到自己的实际中,这是关键。从这个话题,我们继续从网上学习。本主题是使用IE捕获网络数据。其实就是利用控件来完成我们的工作。

  第 1 节 使用 IE 方法提取网页数据库

  为了获取网页的数据,我们可以创建IE控件或者webbrowser控件,结合htmlfile对象的方法和属性,模拟浏览器的操作来获取浏览器页面的数据。

  该方法可以模拟大部分浏览器操作。浏览器能看到的数据可以用代码获取,但是有个致命的缺点:除了烦人的弹窗之外,兼容性确实是一个很麻烦的问题。在我自己的实践中,我觉得这个方法不是很稳定(只是一种感觉)。

  1 创建 IE 模型

  我们在实际工作中遇到过网站和web相关的问题,比如:如何下载web数据?网页之间的通信是如何实现的,是否可以控制等。如果你是用VB/VBA/script或其他支持AUTOMATION的语言编程,掌握对象模型有一个方法值得了解:对待网页作为要控制的对象,该方法需要了解IE(InternetExplorer.Application)或IE控件(Microsoft Internet Controls)的自动化对象,以及标准的文档对象模型(Document)。前两个题目我已经做了很多相关的知识,这里就不详细解释了。

  我给出以下代码:

  Set ie = CreateObject("InternetExplorer.Application") '创建对象

  ie.Visible = True '使 IE 页面可见。这一步之后,你可以在VBA之外看到一个新的IE

  ie.navigate "about:blank" '创建一个空白页面

  上面几行代码的作用就是创建一个IE应用对象,打开一个空白网页。此网页独立于 VBA 应用程序(WORD 或 EXCEL)。其实必须自己关闭,或者使用ie.Quit命令退出——注意简单关闭VBA或者SET ie=nothing都不会退出这个页面。我们经常使用的是将第3行的字符串替换为网站名称,或者替换为你主机中的文件名,或者图片名,都可以。和你在IE地址栏输入名字浏览这些文档效果一样。

  如果只是创建一个空模型,没有任何使用价值。我们需要一个真正的网页。这时候我们需要在VBA应用程序之外打开一个完整的网页,直到网页完全加载完毕。操作只能向下进行。

  2 加载 IE 网页

  让我们修复上面打开空网页的代码:

  子 mynz()

  Set ie = CreateObject("InternetExplorer.Application") '创建对象

  ie.Visible = True '使 IE 页面可见。这一步之后,你可以在VBA之外看到一个新的IE

  ie.navigate "" '创建一个空白页面

  Do直到.ReadyState = 4'检查页面是否完全加载(4表示完全加载)

  DoEvents‘在循环中将工作权限返还给系统,以避免“软崩溃”

  循环

  结束子

  在上面的代码中添加几行:

  Do直到.ReadyState = 4'检查页面是否完全加载(4表示完全加载)

  DoEvents‘在循环中将工作权限返还给系统,以避免“软崩溃”

  循环

  这几行代码可以保证网页加载完成,根据ie.ReadyState的返回值判断。

  readyState 有 5 个状态:

  状态含义说明

  0Uninitialized 对象已创建,但尚未初始化(尚未调用open方法)

  1 初始化对象已经创建,send方法没有被调用。

  2发送数据的send()方法已经被调用,但是当前状态和http头未知

  3 数据传输中已经收到部分数据,因为response和http头不完整,此时通过responseBody和responseText获取部分数据会报错

  4 接收到数据后,可以通过 responseBody 和 responseText 获取完整的响应数据。

  通过上面的分析可以看出,只有.ReadyState = 4时,网页的数据才是有效数据。

  3 获取IE页面数据

  当网页加载完毕后,剩下的工作就是从网页中抓取数据。数据抓取主要使用控件对象的属性和方法。

  1)使用 Set doc = ie.Document 获取网页的文档对象

  从文档对象(Document)扩展而来的对象模型,它代表网页的内容,与之前的IE应用不是同一个系统。

  Documnet(文档)是文档对象模型,相当于OFFICE对象中的APPLICATION。拿到Document后,无论是修改网页、读写网页、触发事件,一切都好说。每个URL对应一个Documnet(这是如果导航到那个URL成功,需要先确认IE对象的READSTATE,然后再确认URL对应的Document被打开)

  2) 在Documnet下可以获取两个节点,documentElement和body。

  可以使用以下句子:

  set xbody=doc.Body ‘获取主体对象

  设置 xDoc=doc。 documentElement '获取根节点

  body已经说过相当于被标记的对象,根节点相当于网页中被标记的元素对象。在 MHTML 类型库定义中,它们都属于 HTMLHtmlElement 类型对象。下面我将把这种类型的对象称为“节点”,但需要注意的是,文档对象不是节点对象,它是HTMLDocument类型的。根节点和正文节点的区别在于根节点包括整个网页。在 HTML 文档对象模型中,这种类型的对象有几个属性来获取内容:

  Object.innerHtml ‘对象内的 HTML 文本

  Object.OuterHtml ‘对象中的 HTML 文本,包括对象本身的 HTML 标记

  Object.innerText ‘对象内部的文本,不包括 HTML 标签

  Object.OuterText ‘同上,包括对象本身的文本

  所以,如果我们想抓取某个网站的所有HTML内容,代码可以这样写:

  设置 doc=ie.Document

  设置 xDoc=doc。 documentElement '获取根节点

  strX=xDoc.OuterHtml ‘获取所有 HTML 内容

  3)每个标签节点对象都有一个名为ChildNodes的集合,里面收录了“这个节点下的标签”,就像一个文件目录,根目录下的一个子目录。

  我们可以看到:HTML标签是文档的根节点,是Document的Childnodes集合的成员(Document不是节点,是另一种类型的对象,上层文档,但是可以有一个低级节点的集合,就像磁盘可以有子目录一样,但它本身不是目录),BODY是根节点的ChildNodes集合的成员,而两个节点DIV和P是BODY的ChildNodes集合的两个成员,也有自己的Childnoes。聚集。

  要注意:在文档对象模型中,集合不同于OFFICE集合。集合从0开始计数,计数属性是Length而不是Count。

  4) 除了 ChildNodes 集合之外,您通常在 Web 文档对象中看到的是一个非常流行的集合:All 集合,它是“最令人困惑”的集合。各个层级的文档和节点都有这个集合,顾名思义,没有分层,但是使用起来也很方便:

  设置 doc=ie.Document

  Set xCols=doc.All '获取文档中的所有节点

  Set xbCols=doc.body.All '获取body节点下的所有节点集

  尽管对于任何标记的节点都有一个 ALL 集,但我们仍然无缘无故地喜欢使用 DOCUMENT 的 ALL。文档最大,一锅ALL最适合找。 ALL 搜索是有条件的:如果这个标签没有 ID,你就找不到它的名字。

  但是ALL集合有一个很方便的特性:ID可以链接到ALL集合:

  strX=doc.All.mytag.innerhtml

  5) 获取文档对象的getElementsByName集合,可以使用如下方法:

  设置 mydivs=doc。 getElementsByName("div") ‘获取所有DIV标签,注意还是一个集合

  6)FORMS 文档对象集合,因为大部分网页数据提交都是通过FORM标签提交的:

  Set myForms=doc.Forms '获取所有 FORM 标签

  设置frmX=myForms.item(0)'第1个FORM

  FORM标签节点所代表的对象是很多朋友关心的内容——在网页对象中,它可以向服务器发送数据,让服务器刷新网页(其实就是服务器发回数据按照一定的格式协议),我们可以把网页的FORM作为远程函数调用接口。 FORM标签中的ACTION指向的URL地址就是函数入口,FORM标签中的每个INPUT标签节点就是函数的参数。当 FORM.Submit 方法发出时,它是远程调用该函数。在服务器端,比如ASP,PHP就是老老实实的找FORM的参数,不管是用GET还是POST:

  frmX.submit’相当于用户在页面上按下了FORM的发送按钮

  上面我已经列出了获取网页数据的一般方法,没有特殊的使用要求。可以根据自己的习惯使用。本专题后面的内容就是利用这些知识点灵活解决实际问题。

  本节知识点回归:

  如何提交表单?怎么下载图片的地址?如何获取表的数据?

  

  积木式编程的内涵:

  在我的系列丛书中,我一直在强调“积木”的编程思想。这也是学习使用VBA的主要方法,尤其是专业人士。其主要内涵:

  1 不要自己输入所有代码。您要做的就是将构建块放在正确的位置,然后修改代码。一定要复制,从你的积木库中复制,然后修改代码,以利用你的时间进行高效思考。

  2 建立自己的“积木库”。平时在学习的过程中,把自己觉得有用的代码拼凑起来,多积累一些,用到的时候随时可以拿到。您的积木库中的数据越多,您的编程想法就越广泛。

  

  VBA 的应用定义

  VBA是使用Office实现个人小型办公自动化的有效手段(工具)。这是我对VBA应用的定义。在取代OFFICE的新办公软件到来之前,谁能做到数据处理的极致才是王道。其中,技能的顶峰非VBA莫属!

  记得20年前刚开始学VBA的时候,当时资料很少,只能自己看源码自己弄明白。这真的很困难。二十年过去了。为了不让学VBA的朋友重复我之前的经验,根据我多年VBA的实际使用,特推出6个VBA专用教程:

  第一套:VBA代码解法是对VBA中各个知识点的讲解。教程147讲,涵盖了大部分VBA知识点,初学者必备;

  第二套:VBA数据库解决方案数据库是专业的数据处理工具。教程详细介绍了使用ADO连接ACCDB和EXCEL的方法和示例操作,适合中层人员学习。

  第三套:VBA数组和字典解决方案。数组和字典是 VBA 的精髓。字典是提高VBA代码水平的有效手段。值得深入研究。是初学者和中级人员改进代码的一种手段。

  第四套:VBA代码解法视频是专门为初学者准备的视频讲解。您可以快速入门并更快地掌握此技能。本套教程为第一套教程视频讲解,听元音比较好。

  第五套:VBA中类的解释和利用这是一个高级教程,解释了类的空性和肉体的程度。虽然类的使用较少,但仔细研究可以促进你的VBA理论的提高。这套教程的领悟主要是读者的领悟,对佛教哲学的领悟。

  第六套教程:《VBA信息获取与处理》,本高级教程,覆盖面更广,实用性更强,面向中高级人员。教程共20个主题,包括:跨应用信息获取、随机信息的使用、邮件发送、VBA上网数据抓取、VBA延时操作、剪贴板应用、Split函数扩展、工作表信息等应用交互、使用FSO对象、工作表和文件夹信息的获取、图形信息的获取、工作表信息功能的定制等

  您可以按照1→3→2→6→5或4→3→2→6→5的顺序从以上信息中学习。本教程在提供大量构建块的同时提供了解释。如有需要,您可以微信:NZ9668

  

  学习VBA是一个过程,也需要体验一下枯燥的感觉

  如太白诗云:百鸟飞扬,孤云自在。相视不倦,唯景亭山。学习的过程,也是修心的过程,修心的过程。在代码的世界里,心静,心情好,身体自然好。心平气正,心无邪见,妄念不多。造福他人就是造福自己。这些教程也是为了帮助大家起航,帮助我,我上面的教程是我很多经验的传递,

  “水利万物而不争”,浓浓稠密,微静无声,巨浪汹涌。学习也是如此,知道自己需要什么,不要蜷缩在你认为是天堂的一小片世界里,等到晚年再自欺欺人地发表言论。努力提升自己,用一颗充满活力的心,把握当下,这才是进取。越有意义的事情,越困难。意志力决定一切,智慧决定成败。不管遇到什么,都是风景。无视纠纷,无视得失。茶,不管是满是小,都不用担心;浓或淡,都有它自己的味道。感受真实的时光,静下心来,多学习,积累祝福。这不只是每天都在胡闹,也不会每天都忍受。在存量更加严峻的后疫情世界,我们会为自己的生存储备知识,尤其是新知识的储备。学时小而无声,用时则大而动荡。

  每一次收获都是成长的记录。怎么可能不靠谱?正是这种坚持,才造就了灿烂的朝霞。最后给致力于VBA学习的朋友做个小测验,让大家感受一下学习过程的枯燥和坚持:

  浮云掠过,耳语无声,

  只有微风震撼了梦中的莺。

  看星星,去掉北斗,

  奈与过去的鹅同行。

  天魔人,明暗昏暗,

  耐心顾长霆。

  VBA 人数,

  在漆黑的夜里,静静地寻梦,盼望黎明。

  怎么没有证据!

  回到学习和使用 VBA 的历史,我印象非常深刻。我想用这些话与大家分享我多年实践经验的成果。我喜欢这些对真正需要使用 VBA 的旅行者有用的东西。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线