网络抓取 - StockCharts - getElementsByTagName ("a")

Web Scraping - StockCharts - getElementsByTagName ("a")

我正在尝试获取此网站中列名称的内部文本和 href 属性:

https://stockcharts.com/freecharts/sectorsummary.html?&G=SECTOR_DJUSNS&O=1

但我得到了除 table.

内的所有超链接

有人可以看看这段代码并告诉我哪里出了问题吗?

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
    
    URL = "https://stockcharts.com/freecharts/sectorsummary.html?&G=SECTOR_DJUSNS&O=1"
    
    XMLPage.Open "Get", URL, False
    XMLPage.setRequestHeader "Content-Type", "text/xml"
    
    XMLPage.send
    
    HTMLDoc.body.innerHTML = XMLPage.responseText

    Row = 1
    
    Set HTMLIms = HTMLDoc.getElementsByTagName("a")
        
    For Each HTMLIm In HTMLIms
        
        Sheets("Results").Cells(Row, 2).Value = HTMLIm.innerText
        Sheets("Results").Cells(Row, 3).Value = HTMLIm.getAttribute("href")
        Row = Row + 1
        
    Next HTMLIm

End Sub

不允许通过 xmlhttp 进行抓取。不确定浏览器的自动化。您需要仔细阅读服务条款。通过浏览器自动化,您可以只使用我怀疑的 url。

从知识的角度来看,可以从 https://c.stockcharts.com/j-sum/sum?cmd=perf&group=SECTOR_DJUSNS 获得数据,这将 return JSON。从那个 json 中,您可以通过访问字典列表 returned 中每个字典的符号值来重建 url。将 sym 值连接到 https://stockcharts.com/h-sc/ui?s=

的基本字符串的末尾

例如列表中的第一个字典

https://stockcharts.com/h-sc/ui?s=   + sym 

给予

https://stockcharts.com/h-sc/ui?s=TKAT

基本上,服务器需要一个查询字符串和 returns json。该页面使用它来更新内容。刷新页面时可以在浏览器的网络选项卡中查看。

您最好寻找提供类似数据的免费 API。