gpt4 book ai didi

javascript - 如何使用 PhantomJS 和 node.js 进行抓取?

转载 作者:行者123 更新时间:2023-12-03 10:57:20 25 4
gpt4 key购买 nike

我已经通过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-phantomphantom 。它们本质上复制了 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 那样使用外部变量。

关于javascript - 如何使用 PhantomJS 和 node.js 进行抓取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28223466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com