【发布时间】:2020-01-13 20:35:22
【问题描述】:
我正在创建一个网络抓取工具,它会从该网站 (https://www.imdb.com/movies-coming-soon/) 抓取明年上映的所有电影,并循环访问一系列链接,其中包含明年每个月的所有电影,它可以工作,但唯一的问题是由于 node.js 异步行为,它没有按顺序返回它们,我如何让它循环遍历数组并按顺序返回数据?
我试着做一个回调函数,但我不知道它会去哪里
const request = require('request')
const cheerio = require('cheerio')
const movieArray = [ '/movies-coming-soon/2019-09/',
'/movies-coming-soon/2019-10/',
'/movies-coming-soon/2019-11/',
'/movies-coming-soon/2019-12/',
'/movies-coming-soon/2020-01/',
'/movies-coming-soon/2020-02/',
'/movies-coming-soon/2020-03/',
'/movies-coming-soon/2020-04/',
'/movies-coming-soon/2020-05/',
'/movies-coming-soon/2020-06/',
'/movies-coming-soon/2020-07/',
'/movies-coming-soon/2020-08/' ]
for (let i = 0; i < movieArray.length; i++) {
request.get('https://www.imdb.com' + movieArray[i] , (err, res, body) => {
if (!err && res.statusCode == 200) {
console.log(res.request.href)
const $ = cheerio.load(body)
//console.log(next)
$('h4').each((i, v) => {
const date = $(v).text()
console.log(date)
})
}
})
}
我希望它按顺序返回数据,而不是根据节点异步行为导致数据返回的速度按顺序返回
【问题讨论】:
-
你想按顺序收集什么结果?每个日期?
-
@jfriend00 日期和在该日期发布的电影,它返回它们,但是在循环遍历链接数组时顺序错误
-
电影在哪里显示的结果?我只看到你得到了日期。
-
@jfriend00 date const 包含日期和电影,
标签: node.js asynchronous cheerio