使用 Excel 和 VBA 进行 StockCharts 网络抓取
StockCharts web scraping using Excel and VBA
我正在尝试使用 Excel 和 VBA 从 StockCharts 获取数据。我可以列出 headers 但不能列出数据。有人可以帮我吗?
这是代码:
Sub Scraping_StockCharts()
Dim XMLPage As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim HTMLIm As MSHTML.IHTMLElement
Dim HTMLIms As MSHTML.IHTMLElementCollection
Dim URL As String
Sheets("Results").Range("a1:z10000").ClearContents
URL = "https://stockcharts.com/freecharts/sectorsummary.html?&G=SECTOR_DJUSHP&O=1"
XMLPage.Open "Get", URL, False
XMLPage.setRequestHeader "Content-Type", "text/xml"
XMLPage.send
HTMLDoc.body.innerHTML = XMLPage.responseText
Set HTMLIms = HTMLDoc.getElementsByTagName("th")
Row = 1
Column = 1
For Each HTMLIm In HTMLIms
Sheets("Results").Cells(Row, Column).Value = HTMLIm.innerText
Column = Column + 1
Next HTMLIm
Set HTMLIms = HTMLDoc.getElementsByTagName("td")
Row = 2
Column = 1
For Each HTMLIm In HTMLIms
Sheets("Results").Cells(Row, Column).Value = HTMLIm.innerText
Column = Column + 1
Next HTMLIm
End Sub
我会这样做。
Sub Web_Table_Option_Two()
Dim HTMLDoc As New HTMLDocument
Dim objTable As Object
Dim lRow As Long
Dim lngTable As Long
Dim lngRow As Long
Dim lngCol As Long
Dim ActRw As Long
Dim objIE As InternetExplorer
Set objIE = New InternetExplorer
objIE.Navigate "https://stockcharts.com/freecharts/sectorsummary.html?&G=SECTOR_DJUSHP&O=1"
Do Until objIE.ReadyState = 4 And Not objIE.Busy
DoEvents
Loop
Application.Wait (Now + TimeValue("0:00:03")) 'wait for java script to load
HTMLDoc.body.innerHTML = objIE.Document.body.innerHTML
With HTMLDoc.body
Set objTable = .getElementsByTagName("table")
For lngTable = 0 To objTable.Length - 1
For lngRow = 0 To objTable(lngTable).Rows.Length - 1
For lngCol = 0 To objTable(lngTable).Rows(lngRow).Cells.Length - 1
ThisWorkbook.Sheets("Sheet1").Cells(ActRw + lngRow + 1, lngCol + 1) = objTable(lngTable).Rows(lngRow).Cells(lngCol).innerText
Next lngCol
Next lngRow
ActRw = ActRw + objTable(lngTable).Rows.Length + 1
Next lngTable
End With
objIE.Quit
End Sub
我正在尝试使用 Excel 和 VBA 从 StockCharts 获取数据。我可以列出 headers 但不能列出数据。有人可以帮我吗?
这是代码:
Sub Scraping_StockCharts()
Dim XMLPage As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim HTMLIm As MSHTML.IHTMLElement
Dim HTMLIms As MSHTML.IHTMLElementCollection
Dim URL As String
Sheets("Results").Range("a1:z10000").ClearContents
URL = "https://stockcharts.com/freecharts/sectorsummary.html?&G=SECTOR_DJUSHP&O=1"
XMLPage.Open "Get", URL, False
XMLPage.setRequestHeader "Content-Type", "text/xml"
XMLPage.send
HTMLDoc.body.innerHTML = XMLPage.responseText
Set HTMLIms = HTMLDoc.getElementsByTagName("th")
Row = 1
Column = 1
For Each HTMLIm In HTMLIms
Sheets("Results").Cells(Row, Column).Value = HTMLIm.innerText
Column = Column + 1
Next HTMLIm
Set HTMLIms = HTMLDoc.getElementsByTagName("td")
Row = 2
Column = 1
For Each HTMLIm In HTMLIms
Sheets("Results").Cells(Row, Column).Value = HTMLIm.innerText
Column = Column + 1
Next HTMLIm
End Sub
我会这样做。
Sub Web_Table_Option_Two()
Dim HTMLDoc As New HTMLDocument
Dim objTable As Object
Dim lRow As Long
Dim lngTable As Long
Dim lngRow As Long
Dim lngCol As Long
Dim ActRw As Long
Dim objIE As InternetExplorer
Set objIE = New InternetExplorer
objIE.Navigate "https://stockcharts.com/freecharts/sectorsummary.html?&G=SECTOR_DJUSHP&O=1"
Do Until objIE.ReadyState = 4 And Not objIE.Busy
DoEvents
Loop
Application.Wait (Now + TimeValue("0:00:03")) 'wait for java script to load
HTMLDoc.body.innerHTML = objIE.Document.body.innerHTML
With HTMLDoc.body
Set objTable = .getElementsByTagName("table")
For lngTable = 0 To objTable.Length - 1
For lngRow = 0 To objTable(lngTable).Rows.Length - 1
For lngCol = 0 To objTable(lngTable).Rows(lngRow).Cells.Length - 1
ThisWorkbook.Sheets("Sheet1").Cells(ActRw + lngRow + 1, lngCol + 1) = objTable(lngTable).Rows(lngRow).Cells(lngCol).innerText
Next lngCol
Next lngRow
ActRw = ActRw + objTable(lngTable).Rows.Length + 1
Next lngTable
End With
objIE.Quit
End Sub