因此,我用jsdom和jquery编写了一个简单的页面刮板,并遇到了一个我不知道如何解决的问题。
下面是一些有用的代码(更改了URL):
var jsdom = require("jsdom");
var fs = require('fs');
var jquery = fs.readFileSync("./js/jquery-min.js").toString();
//There's two pages of product, here's page 1
jsdom.env({
url: 'http://exampleshoppingpage.com',
src: [ jquery ],
done: function(error, window){
var $ = window.$;
$('.productlist .product .title a').each(function() {
console.log($(this).text());
});
}
});
//And do the exact same thing for page 2
jsdom.env({
url: 'http://exampleshoppingpage.com?page=2',
src: [ jquery ],
done: function(error, window){
var $ = window.$;
$('.productlist .product .title a').each(function() {
console.log($(this).text());
});
}
});但我真正想做的是,在打印出来之前,把所有这些产品整理一下。以下是我的尝试:
var jsdom = require("jsdom");
var fs = require('fs');
var jquery = fs.readFileSync("./js/jquery-min.js").toString();
var products = [];
//There's two pages of product, here's page 1
jsdom.env({
url: 'http://exampleshoppingpage.com',
src: [ jquery ],
done: function(error, window){
var $ = window.$;
products $('.productlist .product .title a').each(function() {
products.push($(this).text());
});
}
});
//And do the exact same thing for page 2
jsdom.env({
url: 'http://exampleshoppingpage.com?page=2',
src: [ jquery ],
done: function(error, window){
var $ = window.$;
$('.productlist .product .title a').each(function() {
products.push($(this).text());
});
}
});
products = products.sort();
console.log (products.join("\n"));我得到了一个空数组。我尝试过其他一些方法来判断我是不是在做傻事。我假设它与jsdom中的jQuery有关,而不是与程序的外部部分共享范围?
发布于 2014-11-04 17:10:56
在这种情况下,我们必须记住异步思考。您的作用域很好,但是您正在尝试在products填充数据之前将其转储到控制台。
还有,Array.prototype.sort() 直接在数组上操作。它不返回数组。
var jsdom = require("jsdom");
var jquery = "http://code.jquery.com/jquery.js";
var products = [];
// page 1
jsdom.env({
url: 'http://news.ycombinator.com/',
scripts: [ jquery ],
done: function(error, window){
var $ = window.$;
$('td.title:not(:last) a').each(function() {
products.push( $(this).text() );
});
// page 2
jsdom.env({
url: 'https://news.ycombinator.com/news?p=2',
scripts: [ jquery ],
done: function(error, window){
var $ = window.$;
$('td.title:not(:last) a').each(function() {
products.push( $(this).text() );
});
products.sort();
console.log( products );
}
});
}
});https://stackoverflow.com/questions/26739854
复制相似问题