【发布时间】:2021-04-06 18:10:45
【问题描述】:
https://finviz.com/screener.ashx?v=152&f=cap_midover&c=1,16,17,18,65
我想使用 VBA 从上面的网站上抓取数据,以便获得我想要的 5 列(Ticker、EPS、EPS this Y、EPS next Y、Price)。有 99 个页面需要循环,每个页面有 20 个代码,这意味着我需要抓取近 2000 行数据。我可以通过使用 PowerQuery 来做到这一点,但如果我使用 PowerQuery,刷新数据似乎需要大约 3 分钟。
我不确定我是否使用 VBA 来抓取数据是否能够加快数据刷新所花费的时间。我是 VBA 新手,下面是我的代码,它为我提供了整个网站页面的输出(不是我想要的),并且代码不会遍历 1-99 的不同页面。
Sub GetFinvizData()
Dim str As String
'Delete existing data
Sheets("Data").Activate 'Name of sheet the data will be downloaded into. Change as required.
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
'Download stock quotes. Be patient - takes a few seconds.
str = "https://finviz.com/screener.ashx?v=152&f=cap_midover&r=1&c=1,16,17,18,65"
QueryQuote:
With Sheets("Data").QueryTables.Add(Connection:="URL;" & str, Destination:=Sheets("Data").Range("a1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.refresh BackgroundQuery:=False
.SaveData = True
End With
Sheets("Data").Range("a1").CurrentRegion.TextToColumns Destination:=Sheets("Data").Range("a1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, other:=True, OtherChar:=",", FieldInfo:=Array(1, 2)
Sheets("Data").Columns("A:B").ColumnWidth = 12
Range("A1").Select
End Sub
【问题讨论】:
-
你看过这里吗?示例代码有很多抓取问题 - 有效...
-
嗨,太阳能迈克,你发布了什么吗?我在您的评论中找不到任何链接
-
我希望你在这里使用搜索功能...
-
看看有没有官方的API。至少有一个好用(一目了然)非官方的github.com/mariostoev/finviz;然后是这个有点老的博客:jbmarwood.com/scrape-stock-data-from-finviz
标签: excel vba loops web-scraping powerquery