【发布时间】:2019-07-01 19:29:30
【问题描述】:
她是我在代码中所做的
基本上是做网页抓取
我正在阅读一个包含大约 3500 个链接的文本文件,然后我正在阅读每个链接,过滤我想要的链接并请求获取状态代码、链接和页面标题(使用cheerio)。我减慢了进程具有异步迭代器结构,用于逐行读取以及使用 axios 和异步等待。一切正常,直到第 900 个链接我得到这个令人讨厌的致命错误 '致命错误:无效标记压缩接近堆限制分配失败 - JavaScript 堆内存不足'
我不知道这里发生了什么,这是网络服务器把我踢出去(看起来不像)还是我的代码写得不好并且 v8 引擎没有处理它?(更有可能)
这是我的代码,如果有人想尝试使用大量链接运行,我使用https://hackertarget.com/extract-links/ 获取链接,然后将其放入文本文件中。
var request = require('request');
var cheerio = require('cheerio');
var URL = require('url-parse');
var axios = require('axios');
const fs = require('fs');
const readline = require('readline');
const timeout = require('./timeout')
var main = [];
async function processLineByLine() {
const rl = readline.createInterface({
input: fs.createReadStream('C:/Users/T440/Documents/crawl/links.txt'),
crlfDelay: Infinity
});
for await (const line of rl) {
if (line.startsWith('https://www.example.com')) {
var encodeLink = encodeURI(line);
const response = await axios.get(encodeLink).catch((err)=>{
var Status_ErrorsCatchaxios = {
"status Code": err.response.status ?error.response.status:"No status code available",
"Page title:": $('title').text()?$('title').text():'No title avaialble',
"Original Link": encodeLink?encodeLink:"No Original Link Available",
"errorCode":err
}
main.push(Status_ErrorsCatchaxios)
})
try {
const body = response.data;
if (response.status === 200) {
// Parse the document body
var $ = cheerio.load(body);
var Status_200 = {
"status Code": response.status,
"Page title:": $('title').text(),
"Original Link": encodeLink,
}
main.push(Status_200)
}
if (response.status === 302 || response.status === 404 || response.status === 500) {
// Parse the document body
var Status_Errors = {
"status Code": response.status,
"Page title:": $('title').text(),
"Original Link": encodeLink,
}
main.push(Status_Errors)
}
fs.writeFile("C:/Users/T440/Documents/crawl/output.json", JSON.stringify(main), (err) => {
if (err) console.log(err);
console.log("Successfully Written to File.");
});
} catch (error) {
var Status_ErrorsCatch = {
"status Code": response.status ?error.response.status:"No status code available",
"Page title:": $('title').text()?$('title').text():'No title avaialble',
"Original Link": encodeLink?encodeLink:"No Original Link Available",
}
main.push(Status_ErrorsCatch)
}
}
}
}
processLineByLine()
【问题讨论】:
-
我也有同样的问题,你能解决吗?
标签: javascript node.js express httprequest v8