尝试了解网页抓取的基础知识,并成功使用 Python 实现了这一点。当尝试使用 Node 进行模拟时,出现以下错误:
检测到可能的 EventEmitter 内存泄漏。添加了 11 个管道监听器。使用emitter.setMaxListeners()增加限制
下面是尝试使用node scrape.js运行的简单代码片段:
const request = require('request');
const uri = 'https://www.somewebsite.com/auth/get_menu/?city_id=1';
const headers = {
'accept': '*/*',
'content-type': 'application/json',
'app_client': 'consumer_web'
};
process.on('warning', e => console.warn(e.stack));
request({uri, headers, method: 'GET'}, (err, response, body) => {
if(!err){
console.log(response);
console.log(body);
}
});
请告诉我哪里做错了。提前致谢。
最佳答案
看起来您尝试废弃的网站会生成无限循环并禁用 cookie,因此您需要在发出请求时启用它们。有些人认为这样应该可行。
const request = require("request");
const uri = "https://www.bigbasket.com/auth/get_menu/?city_id=1";
const headers = {
accept: "*/*",
"content-type": "application/json",
app_client: "consumer_web"
};
process.on("warning", e => console.warn(e.stack));
request({ uri, headers, method: "GET", "jar": true }, (err, response, body) => {
if (!err) {
console.log(response);
console.log(err);
}
});
将 jar
设置为 true 就是这里的技巧。
顺便说一句,请求模块越来越无人维护,因此最好使用一些现代包,例如 got
、axios
等。希望这会有所帮助
关于javascript - Node.JS:带有请求模块的简单 GET 抛出 "Possible EventEmitter memory leak detected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59809253/