【问题标题】:Get First Search Result from google从 google 获取第一个搜索结果
【发布时间】:2016-09-10 11:35:52
【问题描述】:

我目前正在尝试使用 Powershell 从特定站点抓取链接页面。已经敲定了当前代码的变体,但基本相同。

我正在尝试获取搜索 google 搜索结果的 URL。我添加了下面的屏幕截图来解释我希望抓住什么。

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

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

【问题讨论】:

  • 你实际上没有说问题是什么? 但是当使用 Invoke-WebRequest 调用时.....
  • Google 页面是动态填充的,因此响应中不包含任何有用的信息,您需要使用 InternetExplorer.Application,这样做的示例很多。或者使用 API 切换到不同的搜索引擎。
  • 你可能想看看微软认知服务microsoft.com/cognitive-services/en-us/apis
  • 或者你也可以像 Fiddler 一样检查实际的请求序列并在 PoSh 中重现它/所有的标头、UA 等/

标签: powershell scrape web-content


【解决方案1】:

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

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

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

您可以在此处了解有关 Google 网络服务的更多信息:https://developers.google.com/custom-search/json-api/v1/reference/cse/list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 2013-01-30
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多