Извлечение информации из таблицы с вкладками в HTML с помощью PowerShell - PullRequest
0 голосов
/ 08 декабря 2018

Я начал пытаться использовать PowerShell для получения данных с веб-страницы.Я научился извлекать таблицы и использовал эту информацию для получения данных портфеля для определенного взаимного фонда.Это было довольно просто с помощью интернета .

$url = 'http://portfolios.morningstar.com/fund/summary?t=ANWPX&region=usa&culture=en-US'
$data = Invoke-WebRequest -Uri $url
$tables = $data.ParsedHtml.getElementsByTagName("table")

После дальнейшего поиска я легко нашел данные, которые искал:

$tables[1].rows[4].cells[1].innerText.Trim()
US Stock

$tables[1].rows[4].cells[2].innerText.Trim()
52.27

Моя проблема в том, чтоПохоже, я не могу найти ответ в Интернете: как мне получить таблицу, встроенную в группу таблиц с вкладками .Например, здесь .Под заголовком Trailing Total Returns , который находится на полпути вниз по странице, я хочу получить 15-летнюю доходность для ANWPX (которая составляет 8,82).PowerShell сообщает, что в коллекции 0 таблиц, когда я использую тот же метод, что и выше (хотя очевидно, что на веб-странице есть таблицы).

Кажется, что таблицу, которую я хочу, будет сложнееработать с PowerShell, когда он группируется вместе с другими таблицами в формате с вкладками .Я пытаюсь понять, как получить эти данные в объект в PowerShell.

Я довольно плохо знаком с PowerShell и практически ничего не знаю о HTML (или jQuery , если это так.с чем мы имеем дело ???), но любой толчок в правильном направлении будет высоко оценен.

1 Ответ

0 голосов
/ 08 декабря 2018

Проблема в том, что на этой странице выполняется хитрый JavaScript-код для загрузки страницы.Нужный вам URL:

$url = 'http://performance.morningstar.com/perform/Performance/fund/trailing-total-returns.action?&t=XNAS:ANWPX&region=usa&culture=en-US&cur=&ops=clear&s=0P00001MJB&ndec=2&ep=true&align=d&annlz=true&comparisonRemove=false&loccat=&taxadj=&benchmarkSecId=&benchmarktype='
$data = Invoke-WebRequest -Uri $url
$tables[0].rows[1].cells[10].innerText.Trim()

Вывод:

8.82

Я нашел это, просто наблюдая за сетью, используя Chrome, когда страница загружалась.

Picture of Chrome network inspector

...