【发布时间】:2019-04-03 16:59:29
【问题描述】:
如何从Here 中提取表格数据?
我可以看到每一行都包含在“团队名称优先”类中。我想将表格导入 excel,但使用来自 web 选项我无法在 IE 窗口中看到表格。我认为 VBA 是我需要采取的途径。我尝试了一些谷歌搜索和 youtube 教程,但没有任何成功。任何帮助将不胜感激!
**编辑 抱歉,我以为我附上了我的代码。问题是它没有加载整个页面。所以我认为这就是我无法提取数据的原因。
There should be a table showing here
Sub FetchNBADefense()
Dim IE As Object, obj As Object
Dim r As Long, c As Long, t As Long
Dim elemCollection As Object
Dim eRow As Long
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True
.navigate ("https://stats.nba.com/teams/opponent/?sort=W&dir=-1")
While IE.readyState <> 4
DoEvents
Wend
ThisWorkbook.Sheets("TeamDefenses").Range("A1:M60").ClearContents
Set elemColleciton = IE.document.getElementsByTagName("team-name first")
For t = 0 To (elemCollection.Length - 1)
For r = 0 To (elemCollection(t).Rows.Cells.Length - 1)
For c = 0 To (elemCollection(t).Rows(r).Cells.Length - 1)
eRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
ThisWorkbook.Worksheets(1).Cells(eRow, c + 1) = elemCollection(t).Rows(r).Cells(c).innerText
Next c
Next r
Next t
End With
Range("A1:M60").Columns.AutoFit
'Clear memory
Set IE = Nothing
End Sub
***新代码:我错过了什么?我看到它是“resultSet”而不是“resultSets”,但仍然出现运行时错误“424”:需要对象
Option Explicit
Public Sub FetchNBAplayerpts()
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Dim json As Object
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://stats.nba.com/stats/leagueLeaders?LeagueID=00&PerMode=PerGame&Scope=S&Season=2018-19&SeasonType=Regular+Season&StatCategory=PTS", False
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
Set json = JsonConverter.ParseJson(.responseText)("resultSet")(1)
End With
Dim headers As Object, header As Variant, headerOutput(), i As Long, rowInfo As Object, iRow As Object
Set headers = json("headers")
Set rowInfo = json("rowSet")
ReDim headerOutput(1 To headers.Count)
For Each header In headers
i = i + 1
headerOutput(i) = header
Next
Dim rowData(), r As Long, c As Long, Item As Variant
ReDim rowData(1 To rowInfo.Count, 1 To UBound(headerOutput))
For Each iRow In rowInfo
r = r + 1: c = 1
For Each Item In iRow
rowData(r, c) = Item
c = c + 1
Next
Next
With ThisWorkbook.Worksheets("PlayerPts")
.Cells(1, 1).Resize(1, UBound(headerOutput)) = headerOutput
.Cells(2, 1).Resize(UBound(rowData, 1), UBound(rowData, 2)) = rowData
End With
End Sub
【问题讨论】:
-
你试过什么?使用 VBA 进行网页抓取的解决方案有无数种,您可能还想搜索“selenium VBA”。
-
浏览一些现有的解决方案。这是可行的。包括您尝试过的内容并解释您遇到的问题。
-
当您检查时可以看到 SCRIPT5:访问被拒绝。 ?
-
对不起,我在路上,但我发布了一个编辑。今天早上我在出发前匆匆浏览了帖子,忘记添加我的脚本。
-
@QHarr 没有?我看到了我想在 html 中提取的所有数据。 (Screenshot of Info)
标签: excel vba web-scraping