我过去曾使用此代码从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']
答案 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个播放器信息):
以下只是为每个团队成员检索的所有信息的一小部分(太多内容无法全部显示)
输出示例: