我刚刚为pjscrape编写了我的第一个脚本,但我发现它的运行速度非常慢。我是pjscrape和phantomjs的新手,所以我不知道哪一个是罪魁祸首。
我从localhost加载文件,因此瓶颈肯定不在转移中。
我的 config.js 脚本如下所示:
pjs.addSuite({
url: 'http://localhost/file.html'.
scraper: function() {
var people = $('table.person');
var results = [];
$.each(people, function() {
var $this = $(this);
results.push({
firstName: $this.find('.firstName').text(),
lastName: $this.find('.lastName').text(),
age: $this.find('.age').text()
});
}
return results;
}
}
然后我使用命令行指令here执行PhantomJS。
~> phantomjs pjscrape.js config.js
我在Chrome中运行相同的代码(只是刮刀功能()),它是即时的。在phantomjs / pjscrape中,需要30秒钟。
任何导致缓慢的线索?
有没有更好的方法来进行DOM屏幕抓取?也许是nodejs解决方案?
答案 0 :(得分:2)
如果Node.JS是一个选项,我可以向您介绍cheerio吗?它是一个很好的库,用于消费可疑形式的HTML文档。它为您提供了类似jQuery的API,用于处理您正在抓取的页面的类似DOM的表示。与request配对,可以轻松抓取HTML。
您的示例最终会看起来像这样(错误处理留给读者练习):
var cheerio = require("cheerio"),
request = require("request");
request("http://localhost/file.html", function(err, res, data) {
var $ = cheerio.load(data);
var people = $('table.person');
var results = [];
$.each(people, function() {
var $this = $(this);
results.push({
firstName: $this.find('.firstName').text(),
lastName: $this.find('.lastName').text(),
age: $this.find('.age').text()
});
}
do_something_with(results);
});
答案 1 :(得分:1)
如果您使用的网页发送完整格式的HTML并且不需要客户端javascript将DOM操作为其最终形式,请跳过phantomjs并使用http客户端库(节点核心或{{3} }或request或superagent)并使用hyperquest从DOM中提取所需的数据。