问题描述
问题是这样的,本菜鸟刚开始学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:UsersAdministratorDesktopnodeTextTestwriteFileTest-’ + 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:UsersAdministrator.lic-PCDesktopnodeTextTestwriteFileTest-’ + 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...