从Web抓取数据,通过下拉菜单循环,减少数据

时间:2015-08-05 00:40:14

标签: excel vba excel-vba

以下是我目前正在努力实现的目标。我希望从我的梦幻棒球联赛中获取季节性数据。下面的代码遍历每个季节和每个团队,但数据非常混乱。我现在需要做的是清理数据以清理列。此外,由于球队和赛季没有附加到球员统计数据,我需要额外的列列出球队名称和赛季。有没有人有任何意见?

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

1 个答案:

答案 0 :(得分:0)

您必须创建parser

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

您当前正在将清洁表发布到从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