Das Problem ist Folgendes: Ich bin ein Neuling, der gerade erst mit dem Erlernen von Knoten begonnen hat. Natürlich ist es etwas für Crawler. Dann habe ich kürzlich einen Roman gelesen, aber es gab zu viele Anzeigen auf diesen kostenlosen Roman-Websites, also wollte ich einen Crawler schreiben, um den gesamten Roman zu durchsuchen, aber die Anzahl der URL-Anfragen war zu häufig, so dass es umgekehrt wäre -gecrawlt und blockiert. Ich habe versucht, das Anforderungsintervall zu erhöhen, aber ich habe keine Wirkung festgestellt. Ich habe jedoch versehentlich festgestellt, dass ich die IP-Adresse ändern kann, um dies zu vermeiden , also bin ich hierher gekommen, um die Experten zu fragen, wenn Sie etwas wissen, können Sie es kurz mit uns teilen, Gott sei Dank.
Ich möchte betonen, dass das Problem darin besteht, wie man die Knoten-IP ändert, um Anti-Climbing zu vermeiden
Zu den verwendeten Frameworks gehören Superagent, Cheerio, Async ... Danke, Gott.
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'); } }); } }) }
Warten auf den großen Gott
防反爬,就是控制程序不能使用一个ip地址以非常快的频率多次抓取同一个网站,那么思路来了,现在拥有一个ip池,则程序可以使用多个ip发起请求,这时要做的就是定期更换程序使用的ip,比如根据你的抓取频率,半个小时,或者半天,或者更长时间为一次间隔,时间到了,就为爬虫程序替换一个ip.这有一条链接,node代理,或许有用/q/10...