Zombie.js和Node.io在JSDOM上运行,因此您的选择要么与JSDOM(或任何等效的包装器)一起使用,要么是无头浏览器(PhantomJS,SlimerJS)或Cheerio。
- JSDOM相当慢,因为它必须在Node.js中重新创建DOM和CSSOM。
- PhantomJS / SlimerJS是合适的无头浏览器,因此性能还可以,而且非常可靠。
- Cheerio是JSDOM的轻量级替代品。它不会在Node.js中重新创建整个页面(它只是下载并解析DOM-不执行任何javascript)。因此,您无法真正单击按钮/链接,但是抓取网页的速度非常快。
根据您的要求,我可能会选择无头浏览器。特别是,我之所以选择CasperJS,是因为它具有良好而富于表现力的API,而且它又快速又可靠(它不需要像JSDOM那样重新发明如何解析和渲染dom或css的方法),而且非常容易与按钮和链接等元素进行交互。
您在CasperJS中的工作流程应大致如下所示:
casper.start();casper .then(function(){ console.log("Start:"); }) .thenOpen("https://www.domain.com/page1") .then(function(){ // scrape something this.echo(this.getHTML('h1#foobar')); }) .thenClick("#button1") .then(function(){ // scrape something else this.echo(this.getHTML('h2#foobar')); }) .thenClick("#button2") thenOpen("http://myserver.com", { method: "post", data: { my: 'data', } }, function() { this.echo("data sent back to the server") });casper.run();


