如何将 PhantomJS 与 node.js 一起用于抓取?
How to use PhantomJS along with node.js for scraping?
我已经通过 npm install node-phantom
安装了 node-phantom 但是当我 运行 这段代码时,它给出 Cannot find module 'webpage'
这个错误
var webpage = require('webpage').create(),
url = "https://www.example.com/cba/abc",
hrefs = new Array();
webpage.open(url,function(status){
if(status=="success"){
var results = page.evaluate(function(){
$("#endpoints").each(function() {
hrefs.push($(this).attr("href"));
});
return hrefs;
});
console.log(JSON.stringify(results));
phantom.exit();
}
});
您不需要node-phantom 中的网页模块。您将使用它的 API 来获得网页模块的表示。必须这样做,因为 PhantomJS 的执行运行时间与 node.js 不同。他们通常不能使用相同的模块。这就是为什么像 node-phantom and phantom 这样的两个执行环境之间存在桥梁的原因。他们基本上复制了 PhantomJS 的 API 用于 node.js.
根据文档,您不需要网页,而是获得一个页面:
var phantom = require('node-phantom');
phantom.create(function(err,ph) {
return ph.createPage(function(err,page) {
// do something with page: basically your script
});
});
您不能只复制和粘贴现有的 PhantomJS 代码。存在差异,因此您必须研究 API(基本上是 github 上的 README)。
完整翻译您的代码:
var phantom = require('node-phantom');
phantom.create(function(err,ph) {
return ph.createPage(function(err,page) {
page.open(url,function(status){
if(status=="success"){
page.evaluate(function(){
hrefs = [];
$("#endpoints").each(function() {
hrefs.push($(this).attr("href"));
});
return hrefs;
}, function(err, results){
console.log(JSON.stringify(results));
ph.exit();
});
}
});
});
});
page.evaluate
仍然是沙箱,所以你不能像 hrefs
.
这样使用外部变量
我已经通过 npm install node-phantom
安装了 node-phantom 但是当我 运行 这段代码时,它给出 Cannot find module 'webpage'
这个错误
var webpage = require('webpage').create(),
url = "https://www.example.com/cba/abc",
hrefs = new Array();
webpage.open(url,function(status){
if(status=="success"){
var results = page.evaluate(function(){
$("#endpoints").each(function() {
hrefs.push($(this).attr("href"));
});
return hrefs;
});
console.log(JSON.stringify(results));
phantom.exit();
}
});
您不需要node-phantom 中的网页模块。您将使用它的 API 来获得网页模块的表示。必须这样做,因为 PhantomJS 的执行运行时间与 node.js 不同。他们通常不能使用相同的模块。这就是为什么像 node-phantom and phantom 这样的两个执行环境之间存在桥梁的原因。他们基本上复制了 PhantomJS 的 API 用于 node.js.
根据文档,您不需要网页,而是获得一个页面:
var phantom = require('node-phantom');
phantom.create(function(err,ph) {
return ph.createPage(function(err,page) {
// do something with page: basically your script
});
});
您不能只复制和粘贴现有的 PhantomJS 代码。存在差异,因此您必须研究 API(基本上是 github 上的 README)。
完整翻译您的代码:
var phantom = require('node-phantom');
phantom.create(function(err,ph) {
return ph.createPage(function(err,page) {
page.open(url,function(status){
if(status=="success"){
page.evaluate(function(){
hrefs = [];
$("#endpoints").each(function() {
hrefs.push($(this).attr("href"));
});
return hrefs;
}, function(err, results){
console.log(JSON.stringify(results));
ph.exit();
});
}
});
});
});
page.evaluate
仍然是沙箱,所以你不能像 hrefs
.