Javascript 如何将PhantomJS脚本更改为NodeJS以进行web抓取
这是PhantomJS脚本,我用它在网页中抓取HTMLDOM。用于等待所有DOM就绪Javascript 如何将PhantomJS脚本更改为NodeJS以进行web抓取,javascript,node.js,phantomjs,Javascript,Node.js,Phantomjs,这是PhantomJS脚本,我用它在网页中抓取HTMLDOM。用于等待所有DOM就绪 //scrap_phantom.js var server = require("webserver").create(); var page = require("webpage").create(); var port = require('system').env.PORT || 3000; var url = "http://www.example.com"; server.listen(port,
//scrap_phantom.js
var server = require("webserver").create();
var page = require("webpage").create();
var port = require('system').env.PORT || 3000;
var url = "http://www.example.com";
server.listen(port, function (request, response) {
function onPageReady() {
var htmlContent = page.evaluate(function () {
return document.documentElement.outerHTML;
});
response.write(htmlContent);
response.close();
phantom.exit();
}
page.open(url, function (status) {
function checkReadyState() {
setTimeout(function () {
var readyState = page.evaluate(function () {
return document.readyState;
});
if ("complete" === readyState) {
onPageReady();
} else {
checkReadyState();
}
});
}
checkReadyState();
});
});
我正在cmd中用“phantomjs scrapt_phantom.js”测试它。上述代码将起作用。现在,我将此代码更改为NodeJS脚本,如下所示:
//scrap_node.js
var http = require("http");
var phantom = require('phantom');
var url = "http://www.example.com";
http.createServer(function(request, response) {
function onPageReady() {
var htmlContent = page.evaluate(function () {
return document.documentElement.outerHTML;
});
response.write(htmlContent);
response.close();
phantom.exit();
}
phantom.create(function (ph) {
return ph.createPage(function (page) {
page.open(url, function (status) {
function checkReadyState() {
setTimeout(function () {
var readyState = page.evaluate(function () {
return document.readyState;
});
if ("complete" === readyState) {
onPageReady();
} else {
checkReadyState();
}
});
}
checkReadyState();
});
});
}, {
dnodeOpts: {weak: false}
});
}).listen(3000);
我正在cmd中用“node scrapt_node.js”测试它。这个代码对我不起作用。它加载了很长时间,并且没有返回任何错误。为什么它对我不起作用?您的代码存在多个问题 phantomjs节点是node.js和phantomjs之间的桥梁。它使用稍有不同的语法,并且没有一个函数是同步的。这意味着如果您在PhantomJS中编写此代码:
var result = page.evaluate(function(arg1, arg2){
//...1
return stuff;
}, "arg1", "arg2");
//...2
那么phantomjs节点(请参阅)中的等效项是:
它本质上是异步的
另一件事是phantom
没有exit
功能,但是ph
有
此外,
setTimeout(function(){…})
没有做任何有用的事情。您需要传递一些超时值,它才会有用。对于正在发生的事情,“此代码对我不起作用”不是一个合适的描述。你看到错误了吗?输出是什么?您希望发生什么?”“即“@ArtjomB”。它的负荷很长时间。。。没有任何错误返回。我看不出来。localhost:3000 show>>>上的浏览器无法加载网页,因为服务器未发送任何数据。谢谢你的帮助,我会查的
page.evaluate(function(arg1, arg2){
//...1
return stuff;
}, function(result){
//...2
}, "arg1", "arg2");