如何从下表中格式化VBA中的数据

我试图从这个网页的首页到结束内容的所有表

使用下面的代码,我可以刮第1页的表格内容,但我不知道如何修改代码来获取从首页到结束的数据。

Option Explicit Sub NBAStats() Dim IE As Object, obj As Object Dim r As Integer, c As Integer, t As Integer Dim elemCollection As Object Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .navigate ("http://stats.nba.com/league/player/#!/") While IE.ReadyState <> 4 DoEvents Wend Do While IE.busy: DoEvents: Loop ThisWorkbook.Sheet1.Clear Set elemCollection = IE.Document.getElementsByTagName("TABLE") For t = 0 To (elemCollection.Length - 1) For r = 0 To (elemCollection(t).Rows.Length - 1) For c = 0 To (elemCollection(t).Rows(r).Cells.Length - 1) ThisWorkbook.Worksheets(1).Cells(r + 1, c + 1) = elemCollection(t).Rows(r).Cells(c).innerText Next c Next r Next t End With Set IE = Nothing End Sub 

尝试find您正在抓取的网站的Sitemap.xml。 sitemap.xml填充了网页中的所有链接。

将该XML文件导入到您的Excel工作表,阅读每个链接并获取其中的每个表。

起初,在我看来,Internet Explorer的VBA自动化非常不稳定,在生产性用例中并不是真正可行的。 这也意味着从浏览器中提取的网站数据在生产性用例中并不真实。 如果您有权使用这些数据,那么您应该要求另一个数据源(例如XMLJSON )。 如果你没有资格,那么你不应该这样做。 可能该网站的提供者不同意这一点。

清楚的是,我正在谈论这样的网站,它只提供JavaScript的数据。 如果数据将在HTML那么您可以通过XMLHTTP获取这些数据。 这是另一回事。

我会提供一个“解决scheme”。 所以你不能简单地认为“他根本无法做到这一点,所以他说你不应该那样做”。

因此,您必须分析网站并挑选可点击进行导航的元素。

 Option Explicit Sub NBAStats() Dim IE As Object Dim r As Long, c As Long, t As Long, rSheet As Long, rStart As Long Dim bReady As Boolean Dim elementsTable As Object Dim elementsPageNavRigth As Object Dim elemPageNavRigth As Object Dim elementsTableDiv As Object ThisWorkbook.Worksheets(1).Cells.Clear Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .navigate ("http://stats.nba.com/league/player/#!/") Do While IE.busy DoEvents Loop rSheet = 0 Do Do While elementsTableDiv Is Nothing Set elementsTableDiv = IE.Document.getElementsByClassName("table-responsive") DoEvents Loop Do While elementsTableDiv(0) Is Nothing DoEvents Loop Set elementsPageNavRigth = IE.Document.getElementsByClassName("page-nav right") Set elemPageNavRigth = elementsPageNavRigth(0) If elemPageNavRigth.className = "page-nav right disabled" Then bReady = True 'If rSheet = 0 Then rStart = 0 Else rStart = 1 Set elementsTable = elementsTableDiv(0).getElementsByTagName("TABLE") For r = rStart To (elementsTable(0).Rows.Length - 1) For c = 0 To (elementsTable(0).Rows(r).Cells.Length - 1) ThisWorkbook.Worksheets(1).Cells(r + rSheet + 1, c + 1) = elementsTable(t).Rows(r).Cells(c).innerText Next c Next r rSheet = rSheet + r If Not elemPageNavRigth Is Nothing Then elemPageNavRigth.Click Set elementsTableDiv = Nothing Loop Until bReady Or elemPageNavRigth Is Nothing End With Set IE = Nothing End Sub