从谷歌获取第一个搜索结果

时间:2016-09-10 11:35:52

标签: powershell scrape web-content

我目前正在尝试使用Powershell从特定网站抓取链接页面。已经删除了当前代码的变体,但它是必不可少的。

我正在尝试获取搜索Google搜索结果的网址。我已经添加了下面的截图来解释我希望抓住的内容。

enter image description here

到目前为止,我有以下代码将文本转换为成功的搜索并按预期工作。但是当使用Invoke-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

有人可以帮助解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

总结评论作为答案,Google的主要搜索页面不包含HTML中的搜索结果。它只有一些容器,并会在页面加载期间加载它并动态填充HTML DOM。

当您下载页面时,您只能获得没有结果的容器HTML。如果您在Google搜索结果页上选择“查看来源”,则实际上可以看到相同内容。

您可以尝试其他搜索引擎或使用网络服务来获取数据。

您可以在此处详细了解Google的网络服务:https://developers.google.com/custom-search/json-api/v1/reference/cse/list