使用htmlagilitypack捕获网站中的“ p类”

时间:2018-11-11 07:22:06

标签: powershell html-agility-pack

我想捕获此“ 文本”,该图像在下面的图片中每分钟循环播放一次,因为此文本每隔几分钟更改一次。

enter image description here

这是我使用的代码,并使用 HtmlAgilityPack.HtmlDocument

fig = tools.make_subplots(rows=3, cols=1, 
shared_xaxes=True, subplot_titles=('Plot 1', 'Plot 2', 'Plot 3'))
fig.append_trace(trace0, 1, 1)
fig.append_trace(trace1, 2, 1)
fig.append_trace(trace2, 3, 1)

下面这是更苗条的代码,功能相同,只是做事方式不同

$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')]")

此类 sc-bdVaJa iHZvIS 是一个div,其位置比 PlayerNowPlaying__TrackInfo-kia103-1 gDXfGh PlayerNowPlaying__TrackInfo-kia103-1 gDXfGh < / strong>是我要捕获的内容,但是在我的代码中使用它时,它将返回空白。

如何只返回我想要的文本?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

在这种情况下,F12->网络选项卡是您的朋友。查看所有javascript文件。

您可能正在寻找的数据在这里:  https://master.myradio-api.prod.scadigital.com.au/mmm/stations

  • 编写代码以从URL下载json字符串。例如查看https://stackoverflow.com/a/11891101/4180382

  • 从F12响应选项卡复制整个json字符串 在Visual Studio中创建一个新的类文件 单击编辑>选择性粘贴>将Json粘贴为类。

  • 在您的代码中,您将需要粘贴的第一个类的名称。它是下面所有类的父类。我会说它类似于“ Rootobject”,但请进行验证。这样:(C#)

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

  • 现在,您可以遍历Rootobject子级以提取所需的所有信息。

答案 1 :(得分:0)

我进一步感谢了上面的人,他向我指出了正确的方向,并检查了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]