如何从VBA格式的下表中提取数据
我正试图从这本书的起始页到结尾部分刮去所有的表格内容 使用下面的代码,我可以刮取第1页的表内容,但我不知道如何修改代码以从起始页到结束获取数据如何从VBA格式的下表中提取数据,vba,excel,web-scraping,Vba,Excel,Web Scraping,我正试图从这本书的起始页到结尾部分刮去所有的表格内容 使用下面的代码,我可以刮取第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("InternetExplor
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
选项显式
次级NBAStats()
尺寸IE作为对象,obj作为对象
Dim r为整数,c为整数,t为整数
作为对象的暗元素集合
设置IE=CreateObject(“InternetExplorer.Application”)
与IE
.Visible=True
.导航(“http://stats.nba.com/league/player/#!/")
而IE.ReadyState 4
多芬特
温德
在忙的时候做
此工作簿.Sheet1.Clear
Set elemCollection=IE.Document.getElementsByTagName(“表”)
对于t=0到(elemCollection.Length-1)
对于r=0到(elemCollection(t).Rows.Length-1)
对于c=0到(elemCollection(t).Rows(r).Cells.Length-1)
此工作簿.工作表(1).单元格(r+1,c+1)=元素集合(t).行(r).单元格(c).内部文本
下一个c
下一个r
下一个t
以
设置IE=无
端接头
尝试查找您正在抓取的网站的Sitemap.xml。sitemap.xml填充包含网页中的所有链接
将xml文件导入Excel工作表,读取每个链接并获取其中的每个表。首先,我认为Internet Explorer的VBA自动化非常不稳定,在生产性用例中并不实际可行。这也意味着,在生产性用例中,从仅用于在浏览器中查看的网站中删除数据实际上是不可行的。如果您有权使用这些数据,那么您应该请求其他数据源(例如
XML
或JSON
)。如果你没有资格,那么你不应该这样做。网站提供商可能不同意这一点
说得清楚一点,我指的是这样的网站,它只提供JavaScript
的数据。如果数据在HTML
中,则可以通过XMLHTTP
获取这些数据。这是另一回事
不过,我会提供一个“解决办法”。所以你不能简单地认为“他根本不能做这件事,所以他说你不应该做那件事。”
因此,您必须分析站点并选择可以单击以进行导航的元素
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
我想你弄错了,网站地图在这里没有帮助,因为当我从第1页转到第2页时,链接没有改变。你能看一下网页吗?我查过了。它在一个响应表“table responsive”下。我想这个查询应该指向Web开发人员。不确定如何从Excel VBA处理此类分页。