您好,登錄后才能下訂單哦!
豆子喜歡看小說 但是很多小說網頁的爬蟲很不給力,更新不及時。本來想看看Powershell有沒有類似Python scarpy的能力,結果很失望,不過意外的發現很多搜索引擎都提供了API 可以通過PowerShell直接調用。
下面以微軟的BING為例。
首先需要在azure的datamarket申請一個賬號
https://datamarket.azure.com/dataset/bing/search#terms
用windows live賬號登錄,然后選擇第一個就行了,這個每個月可以免費查詢5000次,做個測試夠用了。
切換到My Account ->My Data,這里可以直接使用一個在線版的API
比如說,我可以搜索不同的內容,網頁,圖像,視頻,新聞等等~
注意有個Primary Account Key, 這個就是我的主賬號,調用API的時候需要通過這個ID來驗證的
下面看看怎么在PowerShell里面調用。
我在網上搜索了一些,大部分是舊版的語法和例子,具體的語法也語焉不詳 要不然就是一個鏈接直接執行MSDN,這個對于非專業的碼農來說很難找到合適的例子,幸好找到一篇參考文章
http://www.powershelladmin.com/wiki/Accessing_the_Bing_Search_API_v2_using_PowerShell
首先根據主賬號生成對應的access token, 大概可以參考這個鏈接
https://msdn.microsoft.com/en-AU/library/azure/dn798668.aspx#ManuallyCreateToken
然后比著上面那個GUI的自動生成的query格式寫個function轉換成需要的語法結構,因為他的返回值可以是xml或者json,因此直接用invoke-restmethod 調用就行了
$Key = '2rNmeyElCeWRJ1DLvRl5ReJ0l85R/klsdjlskfs' #這個ID我改了一下,不是真的 $Base64KeyBytes = [byte[]] [Text.Encoding]::ASCII.GetBytes("ignored:$Key") $Base64Key = [Convert]::ToBase64String($Base64KeyBytes) function Get-BingQuery { param([string[]] $Query) Add-Type -Assembly System.Web $Query = '%27' + (($Query | %{ [Web.HttpUtility]::UrlEncode($_) }) -join '+') + '%27' # Return the proper string. $Query } $QueryString = Get-BingQuery 'music' $Uri = 'https://api.datamarket.azure.com/Bing/Search/Web?$format=json&$top=5&Query=' + $QueryString $Results = Invoke-RestMethod -Uri $Uri -Headers @{ Authorization = "Basic $Base64Key" } $Results.d.results | Select Title, Description, DisplayUrl, Url | fl
結果如下:
成功
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。