gpt4 book ai didi

node.js - Nightmare 般的网络抓取循环,每次输出都不相同

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

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抓取Web信息。我不知道为什么两个结果链接是相同的,并且每次运行都会改变结果。谢谢。

最佳答案

使用Nightmare在循环中处理异步调用时必须小心

检查有关该概念的this answerthis详细说明。

可以通过以下句子来概括主要思想:

Executing the operations in series requires arranging them to execute in sequential order



该文档显示了如何实现 using plain, vanilla js以及 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触发它们

关于node.js - Nightmare 般的网络抓取循环,每次输出都不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40417205/

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