vba 网页数据抓取(自动化的基本原理方式,请记住,没有什么值得作为您自己的研究)

优采云 发布时间: 2021-11-30 22:15

  vba 网页数据抓取(自动化的基本原理方式,请记住,没有什么值得作为您自己的研究)

  有几种方法可以做到这一点。这是我写的一个答案。我希望你在浏览 关键词“从 网站 抓取数据”时能找到 Internet Explorer 自动化的所有基础知识,但请记住,没有什么值得你自己研究的(如果你不想要坚持无法自定义的预编码。

  请注意,这是一种方式,我不喜欢性能(因为它取决于浏览器的速度),但它很好地理解了互联网自动化的基本原理。

  1)如果我需要浏览网页,我需要一个浏览器!所以我创建了一个 Internet Explorer 浏览器:

  Dim appIE As Object

Set appIE = CreateObject("internetexplorer.application")

  2)我要求浏览器浏览目标网页。通过使用属性“.Visible”,我决定是否要查看浏览器是否正在执行其工作。在构建代码时让 Visible = True 很好,但在每次使用代码获取数据时不要看到 Visible = False 也很好。

  With appIE

.Navigate "http://uk.investing.com/rates-bonds/financial-futures"

.Visible = True

End With

  3)网页加载需要一些时间。所以,我会等它忙起来......

  Do While appIE.Busy

DoEvents

Loop

  4)好的,现在页面加载完毕。假设我想抓取 US30Y T-Bond 的更改:我所要做的就是在 Internet Explorer 上单击 F12 查看网页代码,因此使用指针(在红色圆圈中)我将单击我的元素想抢 一目了然,怎样才能达到我的目的。

  

  5) 我应该做的很简单。首先,我将通过 ID 属性获取收录该值的 tr 元素:

  Set allRowOfData = appIE.document.getElementById("pair_8907")

  在这里,我会得到一个td元素的集合(具体来说,tr是一行数据,td是它的单元格。我们在找第八个,所以我会写:

  Dim myValue As String: myValue = allRowOfData.Cells(7).innerHTML

  为什么我写 7 而不是 8?因为单元格集合是从0开始的,所以第八个元素的索引是7(8-1)。简单分析下这行代码:

  一旦我们将值现在存储在 myValue 变量中,我们就可以关闭 IE 浏览器并通过将其设置为 Nothing 来释放内存:

  appIE.Quit

Set appIE = Nothing

  好了,现在你有了自己的值,你可以用它来做任何你想做的事:把它放在一个单元格中 (Range("A1").Value = myValue),或者把它放在一个表格标签中 (Me.label< @1.Text = myValue)。

  我只想指出,这不是 StackOverflow 的工作方式:在这里您可以发布有关特定编码问题的问题,但您应该先进行自己的搜索。我之所以回答一个没有显示太多研究结果的问题,只是因为我看到它被问了很多次。回到我学习如何做到这一点时,我记得我曾希望得到一些更好的入门支持。所以我希望这个答案只是一个“学习输入”,而不是可以为下一个遇到相同问题的用户提供支持的最佳/最完整的解决方案。因为我已经学会了如何编程。感谢这个社区,我认为您和其他初学者可以使用我的意见来发现编程的美丽世界。

  享受你的练习;)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线