Очистка веб-страниц — сводные диаграммы — getElementsByTagName («a»)

#excel #vba #web-scraping #getelementsbytagname

#excel #vba #очистка веб-страниц #getelementsbytagname

Вопрос:

Я пытаюсь получить внутренний текст и атрибут href имени столбца на этом веб-сайте:

https://stockcharts.com/freecharts/sectorsummary.html?amp;G=SECTOR_DJUSNSamp;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?amp;G=SECTOR_DJUSNSamp;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
  

Ответ №1:

Очистка не разрешена через xmlhttp. Не уверен насчет автоматизации браузера. Вам нужно будет внимательно ознакомиться с условиями предоставления услуг. С автоматизацией браузера вы могли бы просто использовать URL, который, как я подозреваю, у вас есть.

С интеллектуальной точки зрения данные могут быть получены из https://c.stockcharts.com/j-sum/sum?cmd=perfamp;group=SECTOR_DJUSNS , который вернет JSON. Из этого json вы можете восстановить URL-адрес, обратившись к значению symb для каждого словаря в списке возвращенных словарей. Объедините это 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, который обслуживает аналогичные данные.

Комментарии:

1. Большое спасибо за вашу помощь и информацию QHarr. Я попытаюсь получить данные из файлов JSON с помощью Power Query или R. Не могли бы вы, пожалуйста, сообщить мне, где вы получили этот URL? c.stockcharts.com/j-sum/sum?cmd=perfamp;group=SECTOR_DJUSNS

2. Это на вкладке сеть, но вам может быть разрешен доступ к данным только через браузер в соответствии с правилами и условиями