从网络上抓取数据,通过下拉菜单循环,精简数据



下面是我目前想要完成的事情。我正在寻找从我的梦幻棒球联赛刮季节性数据。下面的代码循环了每个赛季和每支球队,但数据非常混乱。我现在需要做的是清理数据以清理列。此外,由于球队和赛季没有附加到球员统计数据中,所以我需要制作一个额外的列来列出球队名称和赛季。有人有什么意见吗?

Sub Extract()

Dim IE As Object, obj As Object
Dim League As Object
Dim links, link
Dim dict As Object
Dim s As Integer
Dim t As Integer

Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
IE.navigate ("http://whatifsports.com/hbd/Pages/Main/WorldRedirect.aspx?id=37")
WaitFor IE
IE.navigate ("http://whatifsports.com/HBD/Pages/World/Statistics.aspx")
WaitFor IE
For s = 1 To 36
s = CStr(s)
IE.document.getelementsbyname("ctl00$ctl00$ctl00$Main$PageOptionsPlaceHolder$PageOptionsPlaceHolder$SeasonDropDown$SeasonDropDown")(0).Value = s
For t = 1 To 32
IE.document.getelementsbyname("ctl00$ctl00$ctl00$Main$PageOptionsPlaceHolder$PageOptionsPlaceHolder$FranchiseDropDown$FranchiseDropDown")(0).selectedindex = t
IE.document.forms(0).submit
WaitFor IE
IE.ExecWB 17, 0
IE.ExecWB 12, 0
lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
Range("A" & lastRow).Select
ActiveSheet.PasteSpecial Format:="HTML", link:=False, DisplayAsIcon:=False,     NoHTMLFormatting:=True
WaitFor IE
Next t
Next s
End Sub
Sub WaitFor(IE As Object)
While IE.readyState <> 4
    DoEvents
Wend
End Sub

您必须创建一个解析器。

一旦您的数据完全符合给定的列集,那么您可以相当简单地在末尾添加额外的列。

您当前将您的干净表发布到从a列的第一个空白行开始的范围。让我们假设您的表有10列宽。然后,您可以使用以下命令添加球队号码和赛季号码:

Range(cells(lastRow, 11), cells(cells(lastRow, 10).end(xldown).row, 11)) = "Team " & t & ", Season " & s

要获得团队名称,我将使用数组而不是每次都试图从网页的下拉列表中读取它。我推荐这个有两个原因。1)我没有这方面的信息来源。2)我认为这是一个安全的假设,在一个给定的赛季中,你将使用这个队名列表不会改变太多。

Dim strTeamNames as variant
strTeamNames = Array("", "Team 1", "Team 2", "Team 3", ..., "Team 32")
Range(cells(lastRow, 11), cells(cells(lastRow, 10).end(xldown).row, 11))  = strTeamName(t) & ", Season " & s

最新更新