2016-01-08 23 views
0

我有一個網站http://www.rnbtop99.com/chart,我試圖通過藝術家和標題來捕獲歌曲列表。使用Invoke-WebRequest從網站獲取數據

我有這個簡單的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('?') 

智能感知告訴我,我可以使用上面這些選項,標籤/類名等

在Chrome中使用檢查選項,它說的藝術家 - 類=「藝術家姓名NG結合」但是如果我運行那麼它什麼都不返回。

對於任何網站我都可以使用Edge/Chrome檢查選項來獲取正確的元素ID /標記/類名然後匹配正確的選項來使用在PowerShell中捕獲任何數據,例如文檔/ ParsedHtml /全部/美體/的innerHTML/innerText屬性等等等等

+0

這裏的問題是,你需要的所有元素不是源的一部分,但動態加載的內嵌JavaScript。 'Invoke-WebRequest'獲取源代碼並對其進行解析,但它實際上並沒有渲染完整的DOM並像瀏覽器一樣執行JavaScript。 –

+0

你怎麼知道它是Java腳本? –

+0

我的意思是,什麼給它是Java腳本,因爲我可以使用計劃B,Internet Explorer ComObject和RexEx來獲取數據,但我需要知道如何查找Java腳本,以免下次使用Invoke時浪費時間-WebRequest。 –

回答

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)"} 
+0

Kayasax,似乎沒有工作 –

+0

你有沒有powershell V3 ?顯示任何錯誤? –

+0

得到了最新版本的PowerShell,在Windows 10上。當我運行這個時,它不會給出任何錯誤,只是這是結果:** BY **但是如果我運行** $ r.Content **之後,它只是列出了一大堆贖金數字。 –

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)"}