节点请求库错误:getaddrinfo ENOTFOUND dns.js 26

时间:2016-07-07 23:48:42

标签: node.js http asynchronous web-scraping request

我正在以连续的方式(一天一次多次请求)抓取网站,并且每次都使用异步和请求节点模块。我使用async eachLimit并行运行函数getPage(此处未在代码中显示)。但是,在几千次查询中,我收到以下错误:

Error: getaddrinfo ENOTFOUND 247sports.com 247sports.com:80
    at errnoException (dns.js:26:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:77:26)

即使我知道我通过的网址也是有效的。我发现有人使用http模块并获得相同的错误的解决方案,但似乎没有人使用请求模块得到这个。 我知道我的ip没有被阻止,因为我能够在错误发生后立即访问该网站。我也知道我的用户代理不是问题,因为我在用户代理列表中轮换,所有用户代理都是有效的。 我的猜测是问题在于请求库与节点http模块的交互。不幸的是,我无法准确地重现问题,因为当我同时或连续推送大量请求时,它似乎只是被触发。

下面的功能代码是我的功能:

function getPage(){
      var options = {
        url: "http://stackoverflow.com/",
        headers: { 'User-agent':  'Mozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20110506 Firefox/4.0.1'
};
      request(options, function(err, resp, body) {

                if (err){
                    throw err;
                    return;
                }
                PagesScraped++;
                console.log(PagesScraped);
                return;
    });
};

for (var i = 0; i < 600; i++){
  getPage();
};

注意:我意识到这段代码异步地获取同一页600次,但如果运行的时间足够多,则错误仍然存​​在...我的本地代码访问同一网站上的数千页。

0 个答案:

没有答案