VBA HTML表格从复杂表格中刮取特定的原始数据

VBA HTML表格从复杂表格中刮取特定的原始数据,vba,excel,web-scraping,Vba,Excel,Web Scraping,我创建了以下模块,从下表html(需要登录)中的特定列(总收入列)中获取前20名的总收入游戏: 特定值嵌套在以下代码中: 下面的VBA代码是我的尝试。 有人知道循环我的代码直到原始表的计数为20,需要你们的建议吗 Sub TopChartGoogle() Dim IE As New InternetExplorer Dim tickername As String Dim doc As HTMLDocument Dim Nof As String Dim i As Integer Fo

我创建了以下模块,从下表html(需要登录)中的特定列(总收入列)中获取前20名的总收入游戏:

特定值嵌套在以下代码中:

下面的VBA代码是我的尝试。 有人知道循环我的代码直到原始表的计数为20,需要你们的建议吗

Sub TopChartGoogle()

Dim IE As New InternetExplorer
Dim tickername As String
Dim doc As HTMLDocument
Dim Nof As String

Dim i As Integer

For i = 8 To 27
tickername = Sheet4.Range("A" & i).Value


IE.Visible = True
IE.navigate "https://www.appannie.com/apps/google-play/top-chart/united-states/game/" & tickername

Do
    DoEvents
    Loop Until IE.readyState = READYSTATE_COMPLETE
Application.Wait (Now + TimeValue("00:00:5"))
Set doc = IE.document


Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("main-row table-row")(0).getElementsByTagName("td")(3).getElementsByTagName("a")(1).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("C" & i).Value = "Wrong Elements"
Else
Sheet4.Range("C" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:1"))

Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("main-row table-row")(0).getElementsByTagName("td")(3).getElementsByTagName("a")(2).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("E" & i).Value = "Wrong Elements"
Else
Sheet4.Range("E" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:1"))


doc.getElementsByClassName("app-name")(2).Click '<<----click the game name

'-----------------------------Genre Game-------------------------------
Application.Wait (Now + TimeValue("00:00:5"))
Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("app-box-content")(5).getElementsByTagName("p")(2).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("D" & i).Value = "Wrong Elements"
Else
Sheet4.Range("D" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:2"))
'------------------------Average Star-------------------------------------
Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("rating-brief")(0).getElementsByTagName("strong")(1).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("F" & i).Value = "Wrong Elements"
Else
Sheet4.Range("F" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:2"))
'------------------------Star 5------------------------------------------
Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("table-wrapper")(0).getElementsByTagName("tr")(0).getElementsByTagName("td")(2).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("G" & i).Value = "Wrong Elements"
Else
Sheet4.Range("G" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:2"))
'-----------------------------Star 4------------------------------------------
Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("table-wrapper")(0).getElementsByTagName("tr")(1).getElementsByTagName("td")(2).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("H" & i).Value = "Wrong Elements"
Else
Sheet4.Range("H" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:2"))
'--------------------------Star 3-------------------------------------------
Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("table-wrapper")(0).getElementsByTagName("tr")(2).getElementsByTagName("td")(2).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("I" & i).Value = "Wrong Elements"
Else
Sheet4.Range("I" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:2"))
'----------------------------Star 2-------------------------------------------
Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("table-wrapper")(0).getElementsByTagName("tr")(3).getElementsByTagName("td")(2).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("J" & i).Value = "Wrong Elements"
Else
Sheet4.Range("J" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:2"))
'----------------------------Star 1-------------------------------------------
Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("table-wrapper")(0).getElementsByTagName("tr")(4).getElementsByTagName("td")(2).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("K" & i).Value = "Wrong Elements"
Else
Sheet4.Range("K" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:2"))

IE.Quit

Next
End Sub
子主题图表Google()
Dim IE成为新的InternetExplorer
作为字符串的Dim tickername
作为HTMLDocument的Dim doc
作为字符串的Dim Nof
作为整数的Dim i
对于i=8到27
tickername=Sheet4.范围(“A”&i).值
可见=真实
即“导航”https://www.appannie.com/apps/google-play/top-chart/united-states/game/“&tickername”
做
多芬特
循环直到IE.readyState=readyState\u完成
Application.Wait(现在+时间值(“00:00:5”))
Set doc=IE.document
Nof=“ERRORHERE”
出错时继续下一步
Nof=Trim(doc.getElementsByClassName(“主行表行”)(0.getElementsByTagName(“td”)(3.getElementsByTagName(“a”)(1.innerText)
错误转到0
如果Nof=“ERRORHERE”,则
表4.范围(“C”和i).值=“错误元素”
其他的
表4.范围(“C”和i).值=Nof
如果结束
Application.Wait(现在+时间值(“00:00:1”))
Nof=“ERRORHERE”
出错时继续下一步
Nof=Trim(doc.getElementsByClassName(“主行表行”)(0.getElementsByTagName(“td”)(3.getElementsByTagName(“a”)(2.innerText)
错误转到0
如果Nof=“ERRORHERE”,则
表4.范围(“E”和i).值=“错误元素”
其他的
表4.范围(“E”和i).值=Nof
如果结束
Application.Wait(现在+时间值(“00:00:1”))

doc.getElementsByClassName(“应用程序名”)(2)。如果我尝试循环,请单击“”,例如在下面的第一个块中,结果提取在Sheet4中堆叠。范围(“C”和“i”)直到最后一行,excel工作表中的19行保持为空

Dim j As Integer, k As Integer
For j = 0 To 19
    For k = 2 To 97 Step 5

Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("main-row table-row")(j).getElementsByTagName("td")(3).getElementsByTagName("a")(1).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("C" & i).Value = "Wrong Elements"
Else
Sheet4.Range("C" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:1"))

Nof = "ERRORHERE"
On Error Resume Next
Nof = Trim(doc.getElementsByClassName("main-row table-row")(j).getElementsByTagName("td")(3).getElementsByTagName("a")(2).innerText)
On Error GoTo 0
If Nof = "ERRORHERE" Then
Sheet4.Range("E" & i).Value = "Wrong Elements"
Else
Sheet4.Range("E" & i).Value = Nof
End If
Application.Wait (Now + TimeValue("00:00:1"))

doc.getElementsByClassName("app-name")(k).Click '<<----click the target game in current row

    Next k
Next j
Dim j为整数,k为整数
对于j=0到19
对于k=2至97,步骤5
Nof=“ERRORHERE”
出错时继续下一步
Nof=Trim(doc.getElementsByClassName(“主行表行”)(j.getElementsByTagName(“td”)(3.getElementsByTagName(“a”)(1.innerText)
错误转到0
如果Nof=“ERRORHERE”,则
表4.范围(“C”和i).值=“错误元素”
其他的
表4.范围(“C”和i).值=Nof
如果结束
Application.Wait(现在+时间值(“00:00:1”))
Nof=“ERRORHERE”
出错时继续下一步
Nof=Trim(doc.getElementsByClassName(“主行表行”)(j.getElementsByTagName(“td”)(3.getElementsByTagName(“a”)(2.innerText)
错误转到0
如果Nof=“ERRORHERE”,则
表4.范围(“E”和i).值=“错误元素”
其他的
表4.范围(“E”和i).值=Nof
如果结束
Application.Wait(现在+时间值(“00:00:1”))

doc.getElementsByClassName(“应用程序名”)(k)。单击“
如果nof=20,则退出sub”
它会这样工作吗?这些行中的错误调试:如果nof=20,则退出sub