使用PhantomJS和node.js保存并呈现网页

Har*_*rry 59 html javascript node.js web-scraping phantomjs

我正在寻找一个请求网页,等待JavaScript呈现(JavaScript修改DOM),然后抓取页面的HTML的示例.

这应该是一个简单的例子,有一个明显的PhantomJS用例.我找不到一个体面的例子,文档似乎都是关于命令行使用的.

Dec*_*ook 42

根据你的评论,我猜你有两个选择

  1. 尝试找到一个phantomjs节点模块 - https://github.com/sgentle/phantomjs-node
  2. 将phantomjs作为节点内的子进程运行 - http://nodejs.org/api/child_process.html

编辑:

似乎phantomjs建议将子进程作为与节点交互的一种方式,请参阅faq - http://code.google.com/p/phantomjs/wiki/FAQ

编辑:

用于获取页面HTML标记的示例Phantomjs脚本:

var page = require('webpage').create();  
page.open('http://www.google.com', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var p = page.evaluate(function () {
            return document.getElementsByTagName('html')[0].innerHTML
        });
        console.log(p);
    }
    phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

  • 你可以简单地使用'page.content',不需要评估任何东西. (9认同)
  • 这很棒,但是......在用节点包装的脚本中努力使用require('webpage'),因为网页模块在节点中是未定义的,它是幻像.有没有人有任何想法?"网页"是节点和幻像的常用模块吗?或者我可以只在某种程度上使用幻像上下文中的require? (3认同)

Ami*_*far 8

使用v2 phantomjs-node之后,在处理HTML之后很容易打印HTML.

var phantom = require('phantom');

phantom.create().then(function(ph) {
  ph.createPage().then(function(page) {
    page.open('https://stackoverflow.com/').then(function(status) {
      console.log(status);
      page.property('content').then(function(content) {
        console.log(content);
        page.close();
        ph.exit();
      });
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

这将显示使用浏览器呈现的输出.