node.js - node爬蟲,如何使用IP池防反爬?
为情所困
为情所困 2017-06-05 11:13:33
0
1
1201

問題是這樣的,本菜鳥剛開始學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

为情所困
为情所困

全部回覆(1)
小葫芦

防反爬,就是控製程式不能使用一個ip位址以非常快的頻率多次抓取同一個網站,那麼思路來了,現在擁有一個ip池,則程式可以使用多個ip發起請求,這時要做的就是定期更換程序使用的ip,比如根據你的抓取頻率,半個小時,或者半天,或者更長時間為一次間隔,時間到了,就為爬蟲程序替換一個ip.這有一條鏈接,node代理,或許有用/q/10...

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!