首页  >  问答  >  正文

node.js - node爬虫,如何使用IP池防反爬?

问题是这样的,本菜鸟刚开始学node,当然,明显是冲着爬虫去的。然后我最近在看一本小说,但是那些免费的小说网站广告太多,所以计划写个爬虫把整本小说爬下来,但是遇到url请求次数太频繁,以至于会遭反爬,被屏蔽掉了,用过增加请求间隔的方式来规避,但是没发现什么效果,偶然发现可以换ip这种东西来规避,奈何百度上这方面资源太少,所以来这里请求大神啦,有知道的可以分享一下吗,谢谢大神。

强调一下,问题是node怎么换ip进行规避反爬

使用的框架有superagent, cheerio, async...谢谢大神啦。
代码:

var superagent = require('superagent');
var cheerio = require('cheerio');
var file = require('./writeText.js');
require('superagent-charset')(superagent);

var str = '';
var count = 150;

var fetchUrl = function (url, callback, len) {
  count++;
  getArticle(url, callback, len);
}

function getArticle (url, callback, len) {
  superagent.get(url)// 'http://m.kanshuzw.com/4/4201/'
  .proxy(proxy)
  .charset('gbk')
  .end(function (err, sres) {
    if (err) {
      return console.error(err);
    } else {
      var $ = cheerio.load(sres.text);
      file.writeFile($('#nr_title').text() + '\n' + $('#nr').text(), 'C:\Users\Administrator\Desktop\nodeTextTest\writeFileTest-' + count + '.txt');
      $('.nr_page .dise').each(function (idx, element) {
        var $element = $(element);
        if ($element.text() === '下一页') {
          superagent.get('http://m.kanshuzw.com' + $element.attr('href'))
          .set("X-Forwarded-For", ip)
          .proxy(proxy)
          .charset('gbk')
          .end(function (err, sres) {
            if (err) {
              console.log('2 error end.');
              return console.error(err);
            }
            var $ = cheerio.load(sres.text);
            file.appendFile($('#nr_title').text() + '\n' + $('#nr').text(), 'C:\Users\Administrator.lic-PC\Desktop\nodeTextTest\writeFileTest-' + count + '.txt');
            console.log('progress: ' + count + '/' + len);
            callback(null, url + ' html content');
          });
        } else if ((idx + 1) === $('.nr_page .dise').length) {
          console.log('progress: ' + count + '/' + len);
          callback(null, url + ' html content');

        }
      });
    }
  })
}


等待大神ing

为情所困为情所困2713 天前1199

全部回复(1)我来回复

  • 高洛峰

    高洛峰2017-06-05 11:15:33

    防反爬,就是控制程序不能使用一个ip地址以非常快的频率多次抓取同一个网站,那么思路来了,现在拥有一个ip池,则程序可以使用多个ip发起请求,这时要做的就是定期更换程序使用的ip,比如根据你的抓取频率,半个小时,或者半天,或者更长时间为一次间隔,时间到了,就为爬虫程序替换一个ip.这有一条链接,node代理,或许有用/q/10...

    回复
    0
  • 取消回复