1

尝试从带有大量 JS 的浏览器中的模板页面中抓取数据。并且在玩jsdom时无法获取任何数据,可能是页面没有足够的时间来加载或渲染。在这种情况下如何抓取数据:使用计时器或按请求下载所有页面

jsdom.env({
  url: link,
  scripts: ["http://code.jquery.com/jquery.js"],
  done: function (errors, window) {
    var $ = window.$;
    var date = $('.date').text();
    console.log(date);
  }
});
4

1 回答 1

3

我的一位同事有一个基于 PhantomJS 的项目就是这样做的:https ://github.com/vmeurisse/phantomCrawl 。

他有一个简单的例子,看起来很像你的片段:

'use strict';

var PhantomCrawl = require('./src/PhantomCrawl');

var urls = [];

urls.push('http://www.bing.com');
var ptc = new PhantomCrawl({
    urls: urls,
    nbThreads: 4,
    crawlerPerThread: 4,
    maxDepth: 1
});

urls是要抓取的 url 列表。

nbThreads是启动的 PhantomJS 的实例数。

crawlerPerThread是每个 PhantomJS 实例并行抓取的页面数。

maxDepth是当前抓取的页面跟随页面中存在的链接的次数。

于 2013-08-13T11:38:50.620 回答