node.js - node crawler, comment utiliser le pool IP pour empêcher l'anti-crawling ?
为情所困
为情所困 2017-06-05 11:13:33
0
1
1179

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

为情所困
为情所困

répondre à tous(1)
小葫芦

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...

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!