#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. Это на вкладке сеть, но вам может быть разрешен доступ к данным только через браузер в соответствии с правилами и условиями