如何修复Excel VBA QueryTables不从网站提取数据

时间:2019-03-29 15:07:53

标签: excel vba web-scraping

我过去曾使用此代码从ESPN提取我的幻想棒球联盟花名册中的数据。我能够得到花名册并将它们全部放在Excel中的一栏中。然后进行一些格式化。但是现在,数据无法提取。什么都没显示。 ESPN确实将其网站更改为外观不同,所以我倾向于认为这影响了此代码的工作方式。

到目前为止,我一直在尝试更改代码:更改所有三种类型(xlSpecifiedTables,xlAllTables,xlEntirepage)的“ .WebSelectionType”;尝试使用其他.WebTables值。

-此“ .QueryTable”命令是否仍可在该URL上使用? -我是否必须使用其他命令/代码从该网址中抓取表格?

import collections
books_by_author = collections.defaultdict(list)
for b in booklist:
    books_by_author[d['author']].append(b)

# and then
books_by_Chinua_Achebe = books_by_author['Chinua Achebe']

1 个答案:

答案 0 :(得分:1)

几乎所有的信息(我认为实际上更多)都可以从其API的json响应中获得。以下是团队和名称的示例。您需要使用json parser。从提供给您的项目的链接中添加.bas后,添加如下所示的引用。

通过使用 Alt + F11 打开VBE,在项目中添加标准模块,右键单击项目区域并添加模块。然后将代码粘贴到模块中模块1。

在VBA Json结构中,[]表示通过索引或“每个结束”访问的集合。 {}是通过键访问的字典,其他所有内容都是字符串文字。

Option Explicit
'  VBE > Tools > References > Microsoft Scripting Runtime
Public Sub GetPlayers()
    Dim json As Object, ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    ws.Cells.ClearContents

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "http://fantasy.espn.com/apis/v3/games/flb/seasons/2019/segments/0/leagues/101823?view=mSettings&view=mRoster&view=mTeam&view=modular&view=mNav", False
        .send
        Set json = JsonConverter.ParseJson(.responseText)
    End With

    Dim item As Object, nextItem As Object, r As Long, c As Long
    c = 0
    For Each item In json("teams")
        r = 1: c = c + 1
        ws.Cells(r, c) = item("location") & " " & item("nickname")
        For Each nextItem In item("roster")("entries")
            r = r + 1
            ws.Cells(r, c) = nextItem("playerPoolEntry")("player")("fullName")
        Next
    Next
End Sub

json样本(1个播放器信息):

以下只是为每个团队成员检索的所有信息的一小部分(太多内容无法全部显示)

enter image description here


输出示例:

enter image description here