【发布时间】:2021-03-24 06:15:59
【问题描述】:
我正在做一个简单的任务,它将从一个网站获取一些数据并在另一个网站中检查它,所以我成功获取了数据并创建了一个循环来检查数据的每个值,但问题是由于 nodejs 发送所有的请求,然后得到响应,这对我来说太糟糕了
-
索引没有以正确的方式排列,这意味着当我在控制台中检查
i值时,有时会变成 55,然后是 2,然后是 26,然后是 5 - 所以我无法检查循环是否由索引 -
检查条件变得随机,因此无法捕获它是否已完成并将所有结果推送到数组中
发生的事情是,每次条件为真时它都会返回数组的结果,但我不希望这样,我想在完成所有检查后得到数组中的所有结果 - 我试图检查数组结果超出了循环,但它只是从数据中得到了 4 或 5,有时什么都不给我,因为所有请求都已发送并且循环已完成,我正在等待响应,所以我无法抓住正确的方法检查是否收到所有响应
这是我的代码:
const http = require("http");
const r = require("request");
const $ = require("jquery-jsdom");
var arr = [];
let data_list_req = function() {
return new Promise((resolve, reject) => {
r({
//get the data from this url
url: "https://example.com/",
method: "GET"
}, function(err,resp,htm) {
resolve(htm)
})
})
}
data_list_req().then((response) => {
let tr = $($($(response).find("table")[0]).html()).find("tr");
let data1_list = tr.find("td:nth-child(2)");
var data2_list = tr.find("td:nth-child(1)");
for(let i = 0, q = 0; i < data2_list.length, q < data1_list.length; i++, q++) {
if (data1_list[q].innerHTML == "text") {
//second step get the data code
let result_page = "http://example.com/code.php";
let check = function() {
return new Promise( (resolve, reject) => {
r({
url: result_page,
method: "POST",
formData: {
"list": data2_list[i].innerHTML+":text"
}
}, function(err,resp,htm) {
resolve(htm)
})
})
}
check().then((resp) => {
let proxy_check = function() {
return new Promise( (resolve, reject) => {
var code = $($(resp).find("table").html()).find("tr")[1].getAttribute("code");
console.log(code);
console.log(data2_list[i].innerHTML+":text")
//last step checking the data
r({
url: "http://example.com/checkdata.php?data="+data2_list[i].innerHTML+":"+data1_list[q].innerHTML+"&code="+code,
method: "GET"
}, function(err,resp,htm) {
resolve(htm);
})
})
}
proxy_check().then( (checked) => {
//data
let first_data = $(checked).find("td")["prevObject"][1].innerHTML;
let second_data = $(checked).find("td")["prevObject"][2].innerHTML;
let check_status = $(checked).find("td")["prevObject"][3].innerHTML;
console.log(first_data+":"+second_data)
console.log(check_status)
if (check_status == "working") {
arr.push(first_data+":"+second_data)
console.log(arr)
}
})
})
}
}
})
【问题讨论】:
标签: node.js web-scraping async-await request