Использование htmlagilitypack для захвата класса p на веб-сайте - PullRequest
0 голосов
/ 11 ноября 2018

Я хочу записать этот ' текст ', показанный на рисунке ниже, в цикле каждую минуту, так как этот текст меняется каждые несколько минут.

enter image description here

Вот код, который я использую, и использую HtmlAgilityPack.HtmlDocument

$metro = 'greatesthits'
$URL = "https://triplem.scadigital.com.au/stations/$metro/live"
[Reflection.Assembly]::LoadFile("C:\Users\makean\Downloads\htmlagilitypack.1.8.10\lib\Net45\HtmlAgilityPack.dll")
[HtmlAgilityPack.HtmlWeb]$web = @{}
[HtmlAgilityPack.HtmlDocument]$doc = $web.Load($url)
$doc.DocumentNode.SelectNodes(".//*[contains(@class,'sc-bdVaJa iHZvIS')]")

Это более тонкий код, приведенный ниже, делает то же самое, но только по-другому

$metro = 'greatesthits'
$URL = "https://triplem.scadigital.com.au/stations/$metro/live"
Add-Type -path 'C:\Users\makean\Downloads\htmlagilitypack.1.8.10\lib\Net45\HtmlAgilityPack.dll'
$doc = New-Object HtmlAgilityPack.HtmlDocument
$wc = New-Object System.Net.WebClient
$doc.LoadHtml($wc.DownloadString($url))
$doc.DocumentNode.SelectNodes(".//*[contains(@class,'sc-bdVaJa iHZvIS')]")

Этот класс sc-bdVaJa iHZvIS является div и находится чуть выше PlayerNowPlaying__TrackInfo-kia103-1 gDXfGh и PlayerNowPlaying__TrackInfo-kia103-1 10D23fGh это то, что я хочу захватить, однако при использовании этого в моем коде он возвращает пустым.

Как я могу вернуть только текст, который я хочу? Любая помощь с благодарностью.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Я еще раз посмотрел на благодарность вышеупомянутому человеку, который указал мне правильное направление, проверил опцию сети в Chrome «осмотреть». Получил метаданные из потока URL.

$metro = '2classicrock'
$URL = 'https://wz2web.scahw.com.au/live/' + $metro + '_32.stream/playlist.m3u8'
$null = (Invoke-WebRequest -Uri $URL).RawContent -match '(https.*m3u8.*)'
$StreamURL = $Matches[0]

$streamMetaData = Invoke-WebRequest -Uri $StreamURL
$null = $streamMetaData.RawContent -match '#EXTINF:4.*?,(.*)'
$Matches[1]
0 голосов
/ 13 ноября 2018

В этом случае F12 -> вкладка Сеть - ваш друг. Посмотрите на все файлы JavaScript.

Данные, которые вы, вероятно, ищете, здесь: https://master.myradio -api.prod.scadigital.com.au / ттт / станции

  • Введите код для загрузки строки json из URL. Смотри например https://stackoverflow.com/a/11891101/4180382

  • Скопируйте всю строку JSON из вашей вкладки ответа F12 В Visual Studio создайте новый файл класса Нажмите «Правка»> «Специальная вставка»> «Вставить Json как классы».

  • В вашем коде вам понадобится имя первого класса, который вы вставили. Это родительский класс всех классов ниже. Я бы сказал, что это что-то вроде «Rootobject», но проверьте. Так же: (C #)

    var obj = JsonConvert.DeserializeObject < Rootobject>(downloadedJson);

  • Теперь вы можете перебирать детей Rootobject для извлечения всей необходимой вам информации.

...