试图建立查询字符串和抓取谷歌结果

Trying to build query string and scrape Google results

本文关键字:抓取 谷歌 结果 字符串 建立 查询      更新时间:2023-09-26

我试图建立一个谷歌查询字符串,向该页面发出请求,抓取HTML,并在Chrome扩展中解析它,这是JavaScript。所以我有下面的代码:

var url = "https://www.google.com/search?#q=" + artist + "+" + title;
searchGoogleSampleInformation(url);
function searchGoogleSampleInformation(url)
{
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, false);
    xhr.onreadystatechange = function ()
    {
        if (xhr.readyState == 4)
        {
            return parseGoogleInformation(xhr.responseText, url);
        }
    }
    xhr.send();
}
function parseGoogleInformation(search_results, url)
{
    var link = $(".srg li.g:eq(0) .r a", search_results).attr('href');
}

parse方法只是抓取第一个搜索结果的url(这不是我最终想要做的,只是为了测试HTTP请求是否正常工作)。在这条线之后,link就是undefined。然后我使用alert(url)并验证我的查询字符串正在正确构建;我把它从警报窗口复制过来,粘贴到另一个标签上,它就像预期的那样调出了结果。然后我用search_results打开了一个新窗口,它似乎是谷歌的常规主页,根本没有搜索。我认为这个问题可能是由于xhr.open调用的异步性而发生的,但翻转也没有帮助。我错过了什么明显的东西吗?

这是因为"https://www.google.com/search?#q=" + artist + "+" + title最初在内容中没有搜索结果。Google最初呈现的页面没有结果,然后通过JavaScript动态加载结果。由于您只是获取页面的HTML并处理它,因此HTML中的JavaScript永远不会被执行。

您正在进行跨域Ajax调用,这在默认情况下是不允许的。您不能进行跨域调用,除非服务器支持它并且您传递了适当的标头。

然而,正如你提到的你正在构建一个Chrome扩展,这是可能的通过在清单文件中添加几个字段:https://developer.chrome.com/extensions/xhr#requesting-permission