web scrapy by nightmare 关于循环,每次输出都不一样
web scrapy by nightmare about loop ,output is not same every time
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
var fs = require('fs');
vo = require('vo');
var result;
nightmare
.goto('http://jufa-kyusyu.jp/teams/')
.wait(1000)
.evaluate(function () {
var options = document.querySelectorAll('option'),i;
var values =[]
for (i = 0; i < options.length; ++i) {
values.push(options[i].value)
}
return values;
})
.then(function (values) {
for (var i = 0; i < values.length; i++) {
if(values[i] == "#") values[i] = "/teams/181.html";
nightmare
.goto("http://www.jufa-kyusyu.jp"+values[i])
.evaluate(function () {
var abc = document.querySelector('iframe[class="autoHeight"]').src.toString()
return abc;
})
.then(function (result) {
console.log(result)
})
.catch(function (error) {
console.error('Search failed:', error);
});}
})
.catch(function (error) {
console.error('Search failed:', error);
});
我想通过 nightmarejs 抓取网络信息 looply.I 不知道为什么有两个结果 link 是相同的,结果在 运行 中每 time.thank 你.
使用 Nightmare 在循环中处理异步调用时必须小心
检查this answer and this关于这个概念的详细解释。
主要思想可以用这句话来概括:
Executing the operations in series requires arranging them to execute
in sequential order
文档显示了如何实现 using plain, vanilla js and also with vo
先睹为快,了解如何使用普通 Javascript 解决此循环问题:
var urls = ['http://example1.com', 'http://example2.com', 'http://example3.com'];
urls.reduce(function(accumulator, url) {
return accumulator.then(function(results) {
return nightmare.goto(url)
.wait('body')
.title()
.then(function(result){
results.push(result);
return results;
});
});
}, Promise.resolve([])).then(function(results){
console.dir(results);
});
基本上您需要做的是将所有呼叫排入列表并使用 Promise.resolve
触发它们
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
var fs = require('fs');
vo = require('vo');
var result;
nightmare
.goto('http://jufa-kyusyu.jp/teams/')
.wait(1000)
.evaluate(function () {
var options = document.querySelectorAll('option'),i;
var values =[]
for (i = 0; i < options.length; ++i) {
values.push(options[i].value)
}
return values;
})
.then(function (values) {
for (var i = 0; i < values.length; i++) {
if(values[i] == "#") values[i] = "/teams/181.html";
nightmare
.goto("http://www.jufa-kyusyu.jp"+values[i])
.evaluate(function () {
var abc = document.querySelector('iframe[class="autoHeight"]').src.toString()
return abc;
})
.then(function (result) {
console.log(result)
})
.catch(function (error) {
console.error('Search failed:', error);
});}
})
.catch(function (error) {
console.error('Search failed:', error);
});
我想通过 nightmarejs 抓取网络信息 looply.I 不知道为什么有两个结果 link 是相同的,结果在 运行 中每 time.thank 你.
使用 Nightmare 在循环中处理异步调用时必须小心
检查this answer and this关于这个概念的详细解释。
主要思想可以用这句话来概括:
Executing the operations in series requires arranging them to execute in sequential order
文档显示了如何实现 using plain, vanilla js and also with vo
先睹为快,了解如何使用普通 Javascript 解决此循环问题:
var urls = ['http://example1.com', 'http://example2.com', 'http://example3.com'];
urls.reduce(function(accumulator, url) {
return accumulator.then(function(results) {
return nightmare.goto(url)
.wait('body')
.title()
.then(function(result){
results.push(result);
return results;
});
});
}, Promise.resolve([])).then(function(results){
console.dir(results);
});
基本上您需要做的是将所有呼叫排入列表并使用 Promise.resolve