【问题标题】:Scraping data from website using vba 4使用 vba 4 从网站抓取数据
【发布时间】:2020-09-18 18:44:56
【问题描述】:

我正在尝试使用 VBA 网络抓取从气象局网站获取伦敦的最低夜间温度。我尝试使用here 发布的代码。当代码运行时,它不会复制我需要它复制的内容。非常感谢您的帮助。

Sub WebScrape_1()

'Create an Internet Explorer browser
Dim appIE As Object
Set appIE = CreateObject("internetexplorer.application")

'Browse the browser to the target webpage
With appIE
    .Navigate "https://www.metoffice.gov.uk/public/weather/forecast/gcpvj0v07"
    .Visible = True ' False activate when happly with code
End With

'Wait while loading
Do While appIE.Busy
    DoEvents
Loop

'What aspect of the webpage to copy
Set allRowOfData = appIE.document.getElementById("nightValue0")

Dim myValue As String: myValue = allRowOfData.innerHTML

'Close the browser
appIE.Quit
Set appIE = Nothing

'Paste the data into the selected range
ActiveWorkbook.Sheets("Data_Temp").Range("C7").Value = myValue

End Sub

【问题讨论】:

  • no luck 没有描述任何类型的问题......我认为这里的任何人都不会浪费时间猜测这意味着什么
  • 同意@jsotola。你得到一些结果吗?错误的结果?没有结果?错误信息?您需要提供有关运行代码时发生的情况的更多信息。
  • 稍微更新了问题。不确定如何让我的代码复制网页的相关部分。
  • 我已经快速检查了您的代码。对我来说,它适用于 IE 部分,所以我最终以 myValue 持有 <span> 元素和夜晚的温度。由于这仍然是 HTML 代码,因此您需要一些字符串处理来提取温度。在Quit-statement 上设置断点,检查myValue 的内容是什么。
  • 哦 (facepalm) - 或许考虑使用实际描述问题所在的标题?当人们遇到特定的编码问题时,他们会通过搜索引擎访问该网站:拥有一个可搜索的标题,或多或少是您在谷歌上寻找解决方案的内容,这对这个网站来说是一个更好的问题。

标签: vba excel


【解决方案1】:

您所要做的就是将“FirstChild”和“innertext”添加到您的代码中。如果我是你,我会以不同的方式编写代码,尤其是在“加载时等待”部分。这不是一种有效的方法。无论如何,请在下面找到您的工作代码:

Sub WebScrape_1()

'Create an Internet Explorer browser
Dim appIE As Object
Set appIE = CreateObject("internetexplorer.application")

'Browse the browser to the target webpage
With appIE
    .Navigate "https://www.metoffice.gov.uk/public/weather/forecast/gcpvj0v07"
    .Visible = True ' False activate when happly with code
End With

'Wait while loading
Do While appIE.Busy
    DoEvents
Loop

'What aspect of the webpage to copy
Set allrowofdata = appIE.document.getElementById("nightValue0").FirstChild
allrowofdata = allrowofdata.innertext

'Close the browser
appIE.Quit
Set appIE = Nothing

'Paste the data into the selected range
ActiveWorkbook.Sheets("Sheet1").Range("C7").Value = myValue

End Sub

【讨论】:

  • 这不是粗鲁,而是要提出对其他人有用的明确问题,而不仅仅是 OP - 这就是本网站的目的:Stack Overflow 不是“帮助 ME 调试 MY 代码”站点。不过,您应该已经知道了-我确定您以前使用过tour 并阅读过How to Ask?拥有 1 个代表和 2 个月的历史,您本可以对自己保持这种元朗诵。
  • Thaks @rlemmi 我明天回到办公室试试看
  • 不客气!只是不要忘记将您的标题更改为更有意义的内容。 @Mat'sMug 抱歉,如果您觉得它冒犯了。我只是认为对新成员有礼貌是件好事。你想培养一个良好的社区。您和您的 1,000+ 评分现在应该知道这一点。您可以要求他以许多更好的方式更改标题或他的问题。下次尝试使用“请”或“谢谢”。我希望这位拥有 1 个代表和 2 个月历史的用户能够教你一些东西:)。
  • 看看你,一身青涩,天真无邪!我希望你能保持那种内心的快乐……我想我对这个标签中大量的废话问题越来越恼火了要问一个明确的问题,那些没有意识到 SO 与 他们他们的代码 无关的人,无数重复,因为似乎没有人打扰 搜索 i> 在他们问之前,等等,等等,等等。没有冒犯,我只是对不属于对一个糟糕问题的一个好看的答案的元咆哮感到恼火。在这里,投赞成票。
  • 哈哈哈谢谢!我会把它当作一种恭维吗?不过,我完全同意你的所有观点。如果我是像你这样的大贡献者,我也会感到沮丧。我想要的只是让新用户(比如我)在使用这个社区时获得良好的体验。当然,我们需要提醒他们保持问题清晰/可搜索。感谢您的支持!嘿,下次,如果你发脾气,就喝杯啤酒看棒球。它会让你的一天变得更好。
猜你喜欢
  • 2015-01-19
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多