我正在尝试通过spookyjs从网站抓取数据并将其存储在mongoDB中。我能够从网站获取数据。但无法保存从网站抓取的数据spookyjs 环境到 mongoDB。为了保存抓取的数据,我将数据库模型实例传递给 spookyjs。我引用了下面的链接。
下面是我的代码,我在 prod_link_info 变量中提取数据并将其值传递到 mongoDB
var product_model = require('./product').product_model;
//get results
spooky.then([{product_model:product_model},function(){
this.waitForSelector('li[id^="product_"]', function() {
// Get info on all elements matching this CSS selector
var prod_link_info = this.evaluate(function() {
var nodes = document.querySelectorAll('li[id^="product_"]');
return [].map.call(nodes, function(node) { // Alternatively: return Array.prototype.map.call(...
return node.querySelector('a').getAttribute('href')+"\n";
});
});
//insert values in mongodb
for (var i = 0; i < prod_link_info.length; i++) {
product_model.create(
{
prod_link_info:prod_link_info[i],
}, function(err, product){
if(err) console.log(err);
else console.log(product);
});
} });
}]);
下面是上面代码中使用的数据库架构和模型的代码。
var mongoose=require('mongoose');
var Schema = mongoose.Schema;
// create a schema
var productSchema = new Schema({
prod_link_info: String,
});
var product_model= mongoose.model('product_model', productSchema);
module.exports = {
product_model: product_model
}
但是当我运行上面的代码时,它给出了以下错误ReferenceError:找不到变量:product_model
。
我想将从 spookyjs 提取的数据存储到 mongoDB。请指出我哪里做错了。
最佳答案
当您将变量的哈希值传递给 spooky 时,它会使用 JSON.stringify
转换为字符串,然后在 casper 中使用 JSON.parse
转换回对象环境(请引用docs);因此不可能将 mongoose 模型传递到 casper 环境(而且没有实际原因)。
要解决该问题,您应该从 Spooky (casper) 环境传递数据。据我所知,唯一的方法是发出
数据,然后使用spooky.on
处理它。您的示例应如下所示:
var product_model = require('./product').product_model;
//get results
spooky.then([{},function(){
this.waitForSelector('li[id^="product_"]', function() {
// Get info on all elements matching this CSS selector
var prod_link_info = this.evaluate(function() {
var nodes = document.querySelectorAll('li[id^="product_"]');
return [].map.call(nodes, function(node) { // Alternatively: return Array.prototype.map.call(...
return node.querySelector('a').getAttribute('href')+"\n";
});
});
this.emit('data.ready', prod_link_info);
});
}]);
spooky.on('data.ready', function (prod_link_info) {
//insert values in mongodb
for (var i = 0; i < prod_link_info.length; i++) {
product_model.create(
{
prod_link_info:prod_link_info[i],
}, function(err, product){
if(err) console.log(err);
else console.log(product);
});
}
});
关于node.js - 将 spookyjs 环境中的值存储到 mongoDB 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31101784/