Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从VBA格式的下表中提取数据_Vba_Excel_Web Scraping - Fatal编程技术网

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

如何从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

我正试图从这本书的起始页到结尾部分刮去所有的表格内容

使用下面的代码,我可以刮取第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
选项显式
次级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处理此类分页。