【问题标题】:VBA Scraping Tables in JSJS 中的 VBA 抓取表
【发布时间】:2020-06-15 06:01:53
【问题描述】:

我试图收集所有可能的解决方案以使我的代码正常工作,但不幸的是我被卡住了。

我想从两个不同的图表中抓取值,这些图表是在后台由 JavaScript 生成的。

https://us.soccerway.com/matches/2019/12/14/england/premier-league/liverpool-fc/watford-football-club/3029238/

我感兴趣的部分实际上是页面中间的两个图表。 “一般游戏统计图表”和右侧的图表饼图。

html代码如下:

       <div class="block  clearfix block_match_stats_plus_chart-wrapper" id="page_match_1_block_match_stats_plus_chart_15-wrapper">

  <h2>General Game Stats Chart</h2>


  <div class="content  ">
    <div class="block_match_stats_plus_chart real-content clearfix " id="page_match_1_block_match_stats_plus_chart_15">
      <iframe src='/charts/statsplus/3029238/' style='width: 550px; height: 300px; overflow-y: hidden;' frameborder='no' allowtransparency="true" scrolling="no"> </iframe>
    </div>
  </div>
</div>
<script type="text/javascript" charset="utf-8">

  (function() {
    var block = new Block('page_match_1_block_match_stats_plus_chart_15', 'block_match_stats_plus_chart', null);


    TimestampFormatter.format('page_match_1_block_match_stats_plus_chart_15');
  })();

【问题讨论】:

    标签: javascript vba web-scraping html-table


    【解决方案1】:

    当图表实际从 iFrame 加载时,您正在查看“匹配”页面 这是您应该查看的来源:https://us.soccerway.com/charts/statsplus/3029238/

    这是您应该从

    抓取数据的 JavaScript 函数
    <script type="text/javascript" charset="utf-8">
    
    window.addEvent('domready', function() {
    
        var chart = new PieChart('Possession');
             chart.addSeries('Possession', [{"name":"Watford FC","y":39},{"name":"Liverpool FC","y":61,"sliced":true}]);
    
        chart.highChartsOptions.plotOptions.pie.topmargin = '20';
        chart.highChartsOptions.plotOptions.pie.size = "80%";
        chart.highChartsOptions.plotOptions.pie.center = ['50%', '55%'];
    
        chart.render('page_chart_1_chart_statsplus_1_chart_possession_1-wrapper');
    
    });
    </script>
    

    【讨论】:

    • 嗨,Sammy,感谢您的回复。有没有办法直接获取 iframe 的来源或其值?就像我想自动收集该表中的每个信息一样。我的意思是,在页面完全加载后,这些元素应该显示为表格,可以通过“GetElementById”方法定位。我尝试将它们解析为 xml 表单但失败了。试图将它们解析为 innerHTMLText 但也失败了。
    【解决方案2】:

    使用 MSXML 请求应该可以工作。仅加载带有图表的页面可能是获取该信息的最快方式。看起来您只需要看起来像是游戏 ID 3029238 的东西就可以在 https://us.soccerway.com/charts/statsplus/ 生成图表

    Option Explicit
    
    Sub Scrape_Stats()
        Dim Clip As Object: Set Clip = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")
        Dim html As Object: Set html = CreateObject("htmlfile")
        Dim Text As String
    
        With CreateObject("MSXML2.XMLHTTP")
            .Open "GET", "https://us.soccerway.com/charts/statsplus/3029238/", False
            .Send
    
            While .readyState <> 4: DoEvents: Wend
    
            html.body.InnerHTML = .responseText
            Text = html.body.getElementsByTagName("Table")(0).outerhtml
        End With
    
        Clip.SetText Text
        Clip.PutInClipboard
    
        ws.Range("A2:H1000").ClearContents
        ws.Range("A2").Select
        ws.PasteSpecial Format:="Unicode Text"
        Set Clip = Nothing
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多