【问题标题】:NodeJS - Request a page with later loaded infoNodeJS - 请求稍后加载信息的页面
【发布时间】:2017-08-14 19:38:11
【问题描述】:

我正在使用nodeJS 制作一个网络爬虫,它正在工作,它调用页面,我使用cheerio 转换为JQuery,并调用标签。

现在我正在尝试调用页面的 cmets,但问题是,我想要的标签会在 Ajax GET 请求几秒钟后加载。而且我做出的 request-promise 找不到这个特定的标签,因为它稍后会加载。

有什么方法可以找到已加载的标签?

代码:

/* Requires */
var rp = require('request-promise');
var cheerio = require('cheerio');

//Page to crawl

var pageToVisit = "http://pagetoVisit.com/page-with-comments.html";
console.log("Visiting "+pageToVisit);


var options = {
    uri: pageToVisit,
    transform: function (body) {
        return cheerio.load(body);
    },
    resolveWithFullResponse: true,
    simple: false
};

rp(options)
    .then(function ($) {
        console.log($('.CommentsTag').text());
    })
    .catch(function (err) {
        console.log(err);
        // Crawling failed...
    });

【问题讨论】:

  • 提取 ajax url,然后执行第二个请求。但是,这需要大量调试,这可能不适合答案的范围:/

标签: javascript node.js ajax request web-crawler


【解决方案1】:

我不相信您可以使用“cheerio”来做到这一点。它解析 HTML DOM,但出于所有意图和目的,它不是 Web 浏览器,因此它不会在页面上执行脚本。您将需要使用 CasperJS(由 PhantomJS 提供支持)之类的工具来呈现页面,以便您等待内容通过脚本加载。

CasperJS waitForSelector

编辑:在cheerio 文档中。

Cheerio 不是网络浏览器

Cheerio 解析标记并提供用于遍历/操作结果数据结构的 API。它不会像 Web 浏览器那样解释结果。具体来说,它不会产生视觉呈现、应用 CSS、加载外部资源或执行 JavaScript。如果您的用例需要任何此类功能,您应该考虑使用 PhantomJS 或 JSDom 等项目。

【讨论】:

  • 这确实有效,我将 PhantomJs 与 CasperJS 一起使用,调用页面并显示 cmets。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多