使用Invoke-WebRequest从网站获取数据

时间:2016-01-08 08:59:17

标签: powershell

我有一个网站http://www.rnbtop99.com/chart,我试图通过艺术家和标题来捕捉歌曲列表。

我将这个简单的PowerShell脚本作为开头:

$site = Invoke-WebRequest -Uri 'http://www.rnbtop99.com/chart'
Start-Sleep -Seconds 5

但是,我对所有不同的标签/类/ ID感到困惑,如何在网站上将它们匹配到使用PowerShell的功能和安排,我需要将其用作捕获数据的各种选项,例如

$site.ParsedHtml.body.getElementsByTagName('div')
$site.ParsedHtml.body.getElementsByClassName('?')

Intellisense告诉我,我可以使用上面的这些选项,Tag / ClassName等。

在Chrome中使用inspect选项,它代表艺术家 - class =" artist-name ng-binding" 但是如果我运行$site.ParsedHtml.body.getElementsByClassName('artist-name ng-binding')则它不会返回任何内容

对于未来任何网站的最佳方式也会很有用,我可以使用Edge / Chrome的inspect选项来获取正确的元素ID / Tag / ClassName,然后与正确的选项匹配PowerShell捕获任何数据,例如Document / ParsedHtml / All / Body / InnerHTML / InnerText等等。

2 个答案:

答案 0 :(得分:0)

试试这个:

$r=iwr  http://www.rnbtop99.com/api/chart/charts.json 
$j=$r.Content |convertfrom-json
$j.Previous.Tracks |%{"$($_.track.title) BY $($_.track.artist.name)"} 

答案 1 :(得分:0)

这是我在本文中所有人的帮助拼凑而成的最终剧本。只需4行,非常好看。小,但非常有效。

$r=Invoke-WebRequest "http://www.rnbtop99.com/api/chart/charts.json"
#Invoke-WebRequest seems to treat application/json as a byte stream
$j=-join($r.Content-as[char[]]) |convertfrom-json
$j.Previous.Tracks |%{"$($_.track.artist.name) - $($_.track.title)"}