在 Node.Js 中使用请求抓取 javascript 生成的内容

Posted

技术标签:

【中文标题】在 Node.Js 中使用请求抓取 javascript 生成的内容【英文标题】:Scraping javascript generated content using request in Node.Js 【发布时间】:2015-02-28 11:10:18 【问题描述】:

我需要从 Google 搜索结果中抓取一些仅在浏览器中显示的内容(我怀疑是在启用 javascript 的情况下)——特别是他们的知识图谱中“人们也在搜索”的内容。

我使用requestcheerio 的组合来抓取,并且已经设法从.com 域强制加载结果,但是,知识库框没有出现在我的结果的body 中,可能是因为它是 javascript 生成的内容。

有人知道我是否可以添加设置或可以使用其他库吗?

下面是我的代码。谢谢!

var request = require('request');
var cheerio = require("cheerio");

request = request.defaults(jar: true);

var options = 
    url: 'http://www.google.com/ncr',
    headers: 
        'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16'
    
;

request(options, function () 

    request('https://www.google.com/search?gws_rd=ssl&site=&source=hp&q=google&oq=google', function (error, response, body) 

        var $ = cheerio.load(body);

        $("li").each(function() 
            var link = $(this);
            var text = link.text();

            console.log(text);
        );
    );
);

【问题讨论】:

【参考方案1】:

您不能使用节点的请求,因为您只是在下载静态内容。为了呈现 JavaScript,您必须使用浏览器。幸运的是,有专门用于此目的的无头浏览器。我建议PhantomJS。

【讨论】:

谢谢!我发现在网上搜索...但是,PhantomJS 仍然没有从页面中获得我需要的信息。也许你知道可能出了什么问题?这是我发布的关于此问题的另一个问题:***.com/questions/27736883/… 谢谢!

以上是关于在 Node.Js 中使用请求抓取 javascript 生成的内容的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 和 MongoDB:保存集合还是每次都抓取它们?

使用 node.js 在 Windows 上抓取网站

如何从Google Cloud Function(Cheerio,Node.js)发出多个http请求

node.js 中的 UDP 跟踪器抓取意外返回零

Node.js 请求模块获取 ETIMEDOUT 和 ESOCKETTIMEDOUT

使用 Node.js 进行网页抓取