尝试构建查询字符串并刮取Google结果

时间:2014-08-07 02:48:46

标签: javascript google-chrome-extension xmlhttprequest

我正在尝试构建Google查询字符串,向该页面发出请求,抓取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 Request是否正常工作)。但该行后linkundefined。然后我使用alert(url)并验证我的查询字符串是否正确构建;我将其从警报窗口复制并粘贴到另一个选项卡中,并按预期提取结果。然后我用search_results打开了一个新窗口,它似乎是Google的常规主页,根本没有搜索。我认为问题可能是因为xhr.open调用的异步而发生,但翻转也没有帮助。我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您正在进行跨域Ajax调用,默认情况下不允许这样做。除非服务器支持并传递相应的标头,否则您无法进行跨域调用。

但是,正如您所说,您正在制作Chrome扩展程序,可以在清单文件中添加一些字段:https://developer.chrome.com/extensions/xhr#requesting-permission