所以Meteor中的基本服务器JS scrapper。
模式有点简单。脚本查找某些链接,然后从中加载内容并将内容存储在变量中。
脚本在循环内加载cheerio时会一直崩溃。 捕获的地方在哪里?为此目的最好的实施是什么?
Meteor.methods({
loadPage: function () {
result = Meteor.http.get("http://url.com");
$ = cheerio.load(result.content);
$('.class').each(function(i,elem){
var link = $(this).attr('href');
var title = $(this).text();
var $ = cheerio.load(Meteor.http.get(link).content);
var postContent = $('.classOnLoadedPage');
Images.insert(
{
link: link,
title: title,
postContent: postContent
});
});
}
});
答案 0 :(得分:0)
我今天遇到了完全相同的问题。原来这是cheerio本身的问题。它的旧版本有这个bug。你必须使用更新的版本然后才能运行。
在atmospherejs class Product
@@all_products = nil
def self.all_products
@@all_products
end
#You will have to call this right before getting the children products
def self.cache_products
if defined? @@all_products && @@all_products.nil?
@@all_products = ActiveSupport::Cache::MemoryStore.new(expires_in: 5.minutes)
list = Product.all.ordered.pluck(:id, :name, :parent_id)
product_instances = []
list.each {|n|
p = Product.new
p.id = n.first
p.name = n.second
p.parent_id = n.third
product_instances << p
}
@@all_products.write('products', product_instances)
end
@@all_products.read('products').select{|c| c.parent_id == nil}
end
def self.get_children(products)
children = []
products.each do |p|
children += Product.all_products.read('products').select { |j| p.id == j.parent_id }}
end
children
end
def self.products_with_no_children
Product.where("id NOT IN (#{Product.all.pluck(:parent_id)})")
end
end
包装mrt:cheerio
中下载次数最多的cheerio包,而npm中的当前版本为cheerio 0.12.3
添加cheerio 0.19.0
而不是rclai89:cheerio
,它会传递mrt:cheerio
,并且在此版本中,循环内的加载效果非常好。