recherche

Maison  >  Questions et réponses  >  le corps du texte

node.js - node crawler, comment utiliser le pool IP pour empêcher l'anti-crawling ?

Le problème est le suivant. Je viens de commencer à apprendre le nœud. Bien sûr, c'est évidemment pour les robots. Ensuite, j'ai récemment lu un roman, mais il y avait trop de publicités sur ces sites Web de romans gratuits, j'ai donc prévu d'écrire un robot pour parcourir l'intégralité du roman, mais le nombre de demandes d'URL était trop fréquent, de sorte qu'il serait inversé. -exploré et bloqué. J'ai essayé d'augmenter l'intervalle de requête pour l'éviter, mais je n'ai trouvé aucun effet. J'ai accidentellement découvert que je pouvais changer l'adresse IP pour l'éviter. Cependant, il y a trop peu de ressources dans ce domaine sur Baidu. , alors je suis venu ici pour demander aux experts. Si vous savez quelque chose, vous pouvez le partager juste un instant, merci, mon Dieu.

Je voudrais souligner que le problème est de savoir comment changer l'adresse IP du nœud pour éviter l'anti-escalade

Les frameworks utilisés incluent superagent, cheerio, async... Merci, mon Dieu.
Code :

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');

        }
      });
    }
  })
}


En attendant le grand Dieu

为情所困为情所困2728 Il y a quelques jours1216

répondre à tous(1)je répondrai

  • 高洛峰

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

    Anti-crawling signifie que le programme de contrôle ne peut pas utiliser une seule adresse IP pour explorer le même site Web plusieurs fois à une fréquence très rapide. Voici l'idée. Maintenant qu'il existe un pool d'adresses IP, le programme peut utiliser plusieurs adresses IP pour lancer des requêtes. Dans ce cas, ce que vous faites est de modifier régulièrement l'adresse IP utilisée par le programme. Par exemple, en fonction de votre fréquence d'exploration, une demi-heure, une demi-journée ou plus est un intervalle. Lorsque le temps est écoulé, remplacez un. IP pour le programme d'exploration Voici un lien, node Agent, peut-être utile/q/10...

    répondre
    0
  • Annulerrépondre