【问题标题】:Web Scraping - StockCharts - getElementsByTagName ("a")网页抓取 - StockCharts - getElementsByTagName ("a")
【发布时间】:2020-12-15 15:59:30
【问题描述】:

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

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

但我得到所有超链接,除了表格内的超链接。

有人可以看看这段代码,让我知道有什么问题吗?

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

【问题讨论】:

    标签: excel vba web-scraping getelementsbytagname


    【解决方案1】:

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

    从智能的角度来看,可以从https://c.stockcharts.com/j-sum/sum?cmd=perf&group=SECTOR_DJUSNS 获取数据,这将返回 JSON。从该 json 中,您可以通过访问返回的字典列表中每个字典的 sym 值来重建 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
    

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

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

    【讨论】:

    • 非常感谢您的帮助和信息 QHarr。我将尝试通过 Power Query 或 R 从 JSON 文件中获取 dat。您能否告诉我您从何处获得此 URL? c.stockcharts.com/j-sum/sum?cmd=perf&group=SECTOR_DJUSNS
    • 它来自网络选项卡,但根据条款和条件,您可能只能通过浏览器访问数据
    猜你喜欢
    • 2020-12-05
    • 2020-11-30
    • 2019-10-21
    • 2017-02-08
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2017-11-06
    相关资源
    最近更新 更多