vb抓取网页内容(接下来不使用控件,仅使用函数来完成这一功能)

优采云 发布时间: 2021-11-06 02:16

  vb抓取网页内容(接下来不使用控件,仅使用函数来完成这一功能)

  在成功获取网页源文件后,很多情况下,接下来的任务就是从中提取链接或获取其文本内容。熟悉VB网络编程的人都非常清楚,使用微软的Internet控件来完成这两个任务是非常容易的。但是有没有可能不使用控件而只使用函数来完成这些功能呢?有操作字符串经验的程序员用代码完成提取链接的功能并不难,因为只需要关注“href”和“src”这两个关键字,但是如果需要提取文本内容,遇到的困难就比较大了,不仅是因为网页的标签很多,还因为Html的语法结构很松散,很可能你会遇到未闭合的标签,只使用字符串操作很复杂。我尝试过使用字符串操作方法。虽然我已经尽可能的优化了整体设计,但是还是需要很长时间,输出效果也不是很理想。

  除了使用字符串操作之外,有没有什么方法可以不使用控件来完成这个功能呢?很多人都试过了,在网上搜索也不难找到,大部分的解决方法都是一样的,方法不同,重点介绍两种解决方案:1、使用MSHtml中的HtmlDocument对象;2、 使用正则表达式。这两种情况在网上都有一些例子。经过对两种方法的实际比较,这里介绍一下两种方法的优缺点:

  1、在 MSHTML 中使用 HtmlDocument 对象:

  在没有特殊要求的情况下,这种方法非常简单且便宜。以下是网上的一段代码,仅供参考:

  私有子 cmdGo_Click()

  Dim objLinkAs HTMLLinkElement

  DimobjMSHTML 作为新的 MSHTML.HTMLDocument

  DimobjDocument 作为 MSHTML.HTMLDocument

  lblStatus.Caption = "通过 HTTP 获取文档"

  '提取网页内容

  SetobjDocument = objMSHTML.createDocumentFromUrl(txtURL.Text,vbNullString)

  lblStatus.Caption = "获取和解析 HTML 文档"

  '等待文件加载完成

  而objDocument.readyState“完成”

  事件

  温德

  lblStatus.Caption = "文档完成"

  '显示网页文件的内容,如果把outerhtml改成innertext就可以输出文本了

  txtSource.Text = objDocument.documentElement.outerHTML

  事件

  '显示文件名

  lblTitle.Caption = "标题:"& objDocument.Title

  事件

  lblStatus.Caption = "提取链接"

  '从 HTMLDocument 对象的链接集合中提取连接

  For EachobjLink 在 objDocument.links

  lstLinks.AddItem objLink

  lblStatus.Caption = "已提取"& objLink

  事件

  下一个

  lblStatus.Caption = "完成"

  嘟

  结束子

  由上可知,这种方式的优点是:1、可以直接从网上下载网页的源代码内容,无需特殊编程;2、 可以输出网页的所有部分内容、链接、文本、源代码等;3、简单快捷,不用写很多代码就可以发挥出非常强大的功能,几乎无所不能。4、 最特别的一点是,互联网上的一些页面使用特殊的脚本语句从其他地方提取网页内容进行展示。即使是火狐等主流浏览器有时也无法正确显示其内容,但通常IE兼容性很好,使用这种方法是调用IE内核,所以这种情况可能不存在。不过这种方法也有一些不便:< @1、不能直接从本地文件加载内容,需要直接下载网页内容,或者配合其他控件;2、 如果网页中有大量的脚本语句,这些脚本就会运行,导致很多不可预知的结果,比如弹窗,或者显示脚本警告等,这就大大减少了程序员对脚本的控制他们自己的程序。不可能。这是您使用打包内容必须支付的费用。成本。s 控制自己的程序。不可能。这是您使用打包内容必须支付的费用。成本。s 控制自己的程序。不可能。这是您使用打包内容必须支付的费用。成本。

  2、使用正则表达式分析:

  正则表达式是一个非常强大的方法,但是对于大多数只针对桌面程序的VB程序员来说,这个方法是很陌生的,但是对于针对网络编程的程序员来说,却是比较熟悉的。对这个不是很熟悉,所以在网上搜索了很多参考内容。不熟悉的可以参考:正则表达式介绍、MSDN中VB中正则表达式的使用介绍、使用正则表达式分析网页内容的例子。最后一个例子详细说明了如何使用正则表达式提取HTML文本,这里不再贴出自己的函数了。但是,应该提醒的是,在这个例子中,脚本标签

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线