2016-09-10 98 views
0

我目前正在嘗試使用Powershell從特定網站中抓取鏈接頁面。已經打破了當前代碼的變體,但它是必不可少的。從谷歌獲取第一個搜索結果

我正在嘗試獲取搜索谷歌搜索結果的URL。我添加了下面的截圖來解釋我希望抓住的東西。

enter image description here

我到目前爲止有以下代碼是將文本轉換到一個成功的搜索,並正在爲expected.however當與調用-的WebRequest我沒有得到任何有意義的結果調用。當使用帶有鏈接的瀏覽器時,它的工作很成功

function Get-GoogleSEQueryString 
{ 
    param([string[]] $Query) 

    Add-Type -AssemblyName System.Web # To get UrlEncode() 
    $QueryString = ($Query | %{ [Web.HttpUtility]::UrlEncode($_)}) -join '+' 

    # Return the query string 
    $QueryString 
} 

$SearchString = "Requiem for an American Dream" 
$QueryString = Get-GoogleSEQueryString $SearchString 
$url = "http://www.google.com.au/?gfe_rd=cr&ei=ZuzTV_v6B7Du8weC8qsY#q="+$QueryString+"+site:IMDB.com" 

#(Invoke-WebRequest -Uri $url).links | Where-Object {$_.href -like "http*"} 

$t = Invoke-WebRequest -uri $url 
$t.AllElements | Where {$_.innerhtml -like '*=*'} |Sort { $_.InnerHtml.Length } | Out-GridView 

任何人都可以協助處理這個問題嗎?

+0

其實你不說的問題是什麼?如果使用Invoke-WebRequest調用_..... – Matt

+2

Google頁面是動態填充的,所以響應不包含任何有用的東西,您需要使用InternetExplorer.Application,這裏有很多例子。或者使用API​​切換到其他搜索引擎。 – wOxxOm

+0

你可能想看看微軟認知服務 https://www.microsoft.com/cognitive-services/en-us/apis –

回答

0

要將評論總結爲答案,Google的主要搜索頁面不包含HTML中的搜索結果。它只有一些容器,並會在頁面加載期間加載它並動態填充HTML DOM。

當你下載頁面時,你只能得到沒有結果的容器HTML。如果您在Google搜索結果頁上選擇「查看源代碼」,則實際上您可以看到相同的內容。

您可以嘗試其他搜索引擎或使用Web服務來獲取數據。

您可以瞭解更多關於谷歌的Web服務的位置:https://developers.google.com/custom-search/json-api/v1/reference/cse/list