【问题标题】:Extracting dynamic content Web scraping提取动态内容网页抓取
【发布时间】:2020-06-03 17:36:09
【问题描述】:

我知道 XMLHTTP 只获取初始页面源,它​​不会执行任何动态更新。我不想尝试自动化 IE,因为它太慢了。

我附上了下面的代码。我想在 BSE 和 NSE 中提取这只股票的数量。 但是只有点击“查看 NSE”才能提取 NSE 卷。 将 NSE 卷提取为

时出现错误

“未设置对象变量”

请帮助我解决问题,我是 XHR、JSON 等的新手...

Sub PV_Extract()

    Dim wpage As New MSXML2.ServerXMLHTTP60
    Dim hdoc As New HTMLDocument


        URL = "https://money.rediff.com/companies/Asian-Paints-Ltd/11580001"
        wpage.Open "GET", URL, False
        wpage.send

        While wpage.readyState <> 4
            DoEvents
        Wend

        Set hdoc = New HTMLDocument

        hdoc.body.innerHTML = wpage.responseText

        Set today_tab_bse = hdoc.getElementsByTagName("table")(0).getElementsByTagName("tr")(1)
        Set today_tab_nse = hdoc.getElementsByTagName("table")(1).getElementsByTagName("tr")(1)

        vol_1 = today_tab_bse.getElementsByTagName("td")(0).innerText
        vol_2 = today_tab_nse.getElementsByTagName("td")(0).innerText

End Sub

【问题讨论】:

  • 您在尝试自动化任何金融网站时都会遇到问题。他们不想让你那样做,所以他们尽可能地让它变得困难。即使您可以使某些东西起作用,他们也很可能会在第二天更改某些东西,使其不再起作用。
  • 我经历过,但我仍然想通过克服这些障碍来进一步学习。
  • 好的-祝你好运:)
  • 这是一个excel问题吗?
  • 如果有人想在 Excel 中解决任务,我认为这是 Excel 的问题。 Excel 通常是网络抓取的不错选择,因为获得的值可以立即在表格中进行处理。

标签: excel vba web web-scraping


【解决方案1】:

始终声明所有变量。您可以通过元素的 id 抓取元素。

Sub PV_Extract()

Dim wpage As New MSXML2.ServerXMLHTTP60
Dim url As String
Dim hdoc As New HTMLDocument
Dim today_tab_bse As Object
Dim today_tab_nse As Object
Dim vol_1 As String
Dim vol_2 As String

  url = "https://money.rediff.com/companies/Asian-Paints-Ltd/11580001"
  wpage.Open "GET", url, False
  wpage.send
  Set hdoc = New HTMLDocument
  hdoc.body.innerHTML = wpage.responseText

  Set today_tab_bse = hdoc.getElementByID("for_BSE")
  Set today_tab_nse = hdoc.getElementByID("for_NSE")

  vol_1 = today_tab_bse.getElementsByTagName("td")(0).innerText
  vol_2 = today_tab_nse.getElementsByTagName("td")(0).innerText

  MsgBox "BSE: " & vol_1 & Chr(13) & "NSE: " & vol_2
End Sub

编辑:获取 BSE 和 NSE 的值

Sub PV_Extract()

Dim wpage As New MSXML2.ServerXMLHTTP60
Dim url As String
Dim hdoc As New HTMLDocument
Dim vol_1 As String
Dim vol_2 As String

  url = "https://money.rediff.com/companies/Asian-Paints-Ltd/11580001"
  wpage.Open "GET", url, False
  wpage.send
  Set hdoc = New HTMLDocument
  hdoc.body.innerHTML = wpage.responseText

  vol_1 = hdoc.getElementByID("ltpid").innerText
  vol_2 = hdoc.getElementByID("ltpid_nse").innerText

  MsgBox "BSE: " & vol_1 & Chr(13) & "NSE: " & vol_2
End Sub

【讨论】:

  • 谢谢。但这并没有把两个卷都加起来,因为 XML 没有选择动态数据。
  • 我支持你写的关于 excel 的内容-“Excel 通常是网络抓取的好选择,因为获得的值可以立即在表格中处理。”
  • @MathInquiry 我用第二个宏补充了我的答案,它提供了您请求的数据。
猜你喜欢
  • 2019-01-13
  • 2020-05-24
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
  • 2010-10-09
相关资源
最近更新 更多