如何在Excel / Google表格中抓取网站?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (156)

我应该如何抓取这个网页https://www.bseindia.com/stock-share-price/asian-paints-ltd/asianpaint/500820/并特别需要表格中提到的ROE数字?

我在Excel中使用了以下代码。我对Google Sheets Scraping了解不多

 Sub FetchData()
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;https://www.bseindia.com/stock-share-price/asian-paints-ltd/asianpaint/500820/", Destination:=Range( _
        "$A$1"))
        .Name = "www"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub

我无法正确获取数据。

对此有何建议/帮助?需要ROE数字其余部分不是必需的。

提问于
用户回答回答于

使用页面使用它的API要快得多。您可以使用powerquery来处理json响应,json解析器或只使用split。如果要按下按钮刷新,请将代码放入标准模块并链接到按钮。

Option Explicit
Public Sub GetInfo()
    Dim s As String, ids(), i As Long
    ids = Array(500820, 500312, 500325, 532540)
    With CreateObject("MSXML2.XMLHTTP")
        For i = LBound(ids) To UBound(ids)
            .Open "GET", "https://api.bseindia.com/BseIndiaAPI/api/ComHeader/w?quotetype=EQ&scripcode=" & ids(i) & "&seriesid=", False
            .send
            s = .responseText
            ActiveSheet.Cells(i + 1, 1) = Split(Split(s, """ROE"":""")(1), Chr$(34))(0)
        Next
    End With
End Sub
用户回答回答于

遗憾的是,这是不可能的,因为该网站是由JavaScript控制的,Google表格无法理解/导入JS。你可以通过为给定的链接禁用JS来测试这个,你会看到一个空白页面:

所有你能得到的就是你所看到的:

=ARRAY_CONSTRAIN(IMPORTDATA("https://www.bseindia.com/stock-share-price/asian-paints-ltd/asianpaint/500820/"), 5000, 15)

扫码关注云+社区

领取腾讯云代金券