0
無法訪問數據庫,所以我不得不取消網站以取回他的數據。 該網站和服務器開發不良,所以一些頁面大於10s渲染。NodeJS鏈接方法來取消緩慢的網站的好方法
我使用Node和request-promise
來獲取html和cheerio
來構建一個我想要轉換爲JSON文件的JS對象。我必須在URL參數的整個一天中循環(在2016年1月進行首次測試)。
我的問題是節點使用異步事件。所以我所有的循環都會在所有的request
被製造的同時被觸發(大約100ms,因此就像瞬間)。該網站無法處理這個,所以我開始得到第一個HTML,然後500 error
。
我打算做的是在調用下一個請求(讓窮人的服務器呼吸一下)之前等待迭代完全報廢。
像這樣:
輸入環路=>請求=>獲取HTML背部(10秒)=>報廢磁盤=> i ++在它=>寫;輸入循環=> ...
而不是做它的異步。
這裏一堆我的代碼:
var rp = require('request-promise')
var cheerio = require('cheerio')
[...]
console.log('Start ');
let array = []
for (var year = 2016; year < 2017; year++) {
for (var month = 1; month <= 1; month++) {
for (var day = 1; day <= 31; day++) {
const options = {
url : 'http://myurl',
Cookie: cookie,
transform: function (body) {
return cheerio.load(body);
}
}
let data
rp(options)
.then(function ($) {
=> My Scrapping stuff return in data
})
.catch(function (err) {
// Crawling failed or Cheerio choked...
})
.pipe(fs.writeFile(`./data/${timestamp}.json`, JSON.stringify(data), function(err) {
if (err) {
console.log(err);
}
console.log(` File successfully written! - ${timestamp}`)
})
}
}
}
如果我調整環路爲工作像2天或3天只有一切都很順利。