//Nodejs 模拟IP 爬取图片

var _ = require('underscore');

var cheerio = require('cheerio');

var superagent = require('superagent');

var async = require('async');

var mkdirp = require('mkdirp');

var fs = require('fs');

var http = require('http');

//本地存储目录

var dir = './images';

//创建目录

mkdirp(dir, function(err) {

if(err){

console.log(err);

}

});

var imgList = new Array();

var url = "http://www.easyicon.net/iconsearch/iconset:flatastic-icons";

getData(url);

console.log(imgList.length)

function getData(url){

console.log("url" , url)

superagent.get(url).end(function (err, sres) {

if (err) {

console.log(err)

return;

}

var $ = cheerio.load(sres.text);

var pages_all = $(".pages_all");

var thisPage = pages_all.find("span");

var next = thisPage.next();

var liList = $("#container").find("ol").find("li");

var pages = new Array();

_.each(liList , function(item , index){

if(index == 0 ){

return;

}

var href = $(item).find("a").eq(0).attr("href");

//获取数据,下载

//getHtml(href);

pages.push(href);

})

console.log(pages.length)

async.eachSeries(pages, function(item,callback){

console.log("-一轮结束111-")

getHtml(item , function(){

console.log("-一轮结束22-")

callback(null)

});

}, function(err , result) {

if(err){

console.log("-一轮结束-" + err)

}

console.log("-一轮结束-")

var href = next.attr("href");

if(href){

href = "http://www.easyicon.net" + href;

getData(href);

}

});

});

}

var getHtml = function(href , getHtmlCB){

var temp = "http://www.easyicon.net" + href;

console.log(temp)

superagent.get(temp).end(function (err, sres) {

if (err) {

console.log(err)

return;

}

var $ = cheerio.load(sres.text);

var name = $(".icon_img_one").find("img").attr("alt");

if(name){

name = name.replace(/ /g , "_")

}

var a96 = $("img[width=96]").parent().find("a").eq(0);

var href96 = a96.attr("href");

var a64 = $("img[width=64]").parent().find("a").eq(0);

var href64 = a64.attr("href");

var a32 = $("img[width=32]").parent().find("a").eq(0);

var href32 = a32.attr("href");

//saveImg(href96 , dir , name + "@3x.png" );

// saveImg(href64 , dir , name + "@2x.png" );

// saveImg(href32 , dir , name + ".png" );

console.log("---")

async.parallel(

[function(cb){

console.log("---11")

saveImagea(href96 , dir , name + "@3x.png" , function(){

cb(null);

})

},

function(cb){

saveImagea(href64 , dir , name + "@2x.png", function(){

cb(null);

} )

},

function(cb){

saveImagea(href32 , dir , name + ".png", function(){

cb(null);

} )

}

] , function(err, results){

if(err){

console.log("下载出错")

}

getHtmlCB();

})

});

}

/**

* 模拟ip,下载图片

* @param url

* @param dir

* @param name

* @param cb

*/

var saveImagea = function (url, dir,name , cb){

var ip = _.random(1 , 254)

+ "." + _.random(1 , 254)

+ "." + _.random(1 , 254)

+ "." + _.random(1 , 254)

console.log(url , ip)

superagent

.get(url)

//.set("X-Forwarded-For" , "10.111.198.90")

.set("X-Forwarded-For" , ip)

.end(function (err, sres) {

if (err) {

console.log(err)

return;

}sres

//console.log(sres.body);

fs.writeFile(dir + "/"+name, sres.body, 'binary', function (err) {

if (err) throw err;

console.log('file saved '+name);

cb();

});

})

}

function saveImg(url, dir,name , cb){

http.get(url, function(res){

res.setEncoding('binary');

var data='';

res.on('data', function(chunk){

data+=chunk;

});

res.on('end', function(){

fs.writeFile(dir + "/"+name, data, 'binary', function (err) {

if (err) throw err;

console.log('file saved '+name);

console.log("---")

cb();

});

});

}).on('error', function(e) {

console.log('error'+e)

cb();

});

}

php爬虫伪造请求头,Nodejs 伪造IP 爬取图片相关推荐

  1. DNS反射放大攻击分析——DNS反射放大攻击主要是利用DNS回复包比请求包大的特点,放大流量,伪造请求包的源IP地址为受害者IP,将应答包的流量引入受害的服务器...

    DNS反射放大攻击分析 摘自:http://www.shaojike.com/2016/08/19/DNS%E6%94%BE%E5%A4%A7%E6%94%BB%E5%87%BB%E7%AE%80%E ...

  2. 08-Flutter移动电商实战-dio基础_伪造请求头获取数据

    08-Flutter移动电商实战-dio基础_伪造请求头获取数据 在很多时候,后端为了安全都会有一些请求头的限制,只有请求头对了,才能正确返回数据.这虽然限制了一些人恶意请求数据,但是对于我们聪明的程 ...

  3. firefox伪造请求头信息,模拟手机访问网站

    大概有两年没有去过chinaz的论坛了,昨天上去逛了逛.正好看到一个朋友在问百度是如何判断是不是手机登录的.有几个热心朋友回答的是js,我把百度首页的js看了下,没有找到一丝的手持设备判断的信息,我也 ...

  4. Firefox伪造请求头

    原文地址:http://justcoding.iteye.com/blog/2086233 Firefox黑客插件:http://blog.csdn.NET/stilling2006/article/ ...

  5. python伪造请求头x-forwarded-for的作用_Pyspider中给爬虫伪造随机请求头的实例

    Pyspider 中采用了 tornado 库来做 http 请求,在请求过程中可以添加各种参数,例如请求链接超时时间,请求传输数据超时时间,请求头等等,但是根据pyspider的原始框架,给爬虫添加 ...

  6. 修改哪个请求头可以伪造请求ip_欧姆龙NX系列EtherNet/IP通信

    1.Ethernet/IP基础 工业以太网协议 (Ethernet/IP) 是由ODVA所开发并得到了罗克韦尔自动化的强大支持.它使用已用于ControlNet和DeviceNet的控制和信息协议 ( ...

  7. 修改哪个请求头可以伪造请求ip_基于EtherNet/IP实现欧姆龙NX系列PLC通信

    1.引言 工业以太网协议 (Ethernet/IP) 是由ODVA所开发并得到了罗克韦尔自动化的强大支持.它使用已用于ControlNet和DeviceNet的控制和信息协议 (CIP) 为应用层协议 ...

  8. ajax伪造请求头设置失败,以及浏览器插件解决方案(待完善)

    w3c规定,当请求的header匹配以下不安全字符时,将被终止,具体参考如下: Accept-Charset Accept-Encoding Connection Content-Length Coo ...

  9. Python 爬虫 Request(请求头)和Response(响应头)的 内容详解 【爬虫资料二】

    Resquest请求头[以访问知乎]为例(使用Fiddler抓的包) 请求行包含的信息: 请求的方法(POST)  #其他的方法还有GET.HEAD.PUT.DELETE.OPTIONS.TRACE ...

最新文章

  1. 数组方法深入扩展(遍历forEach,filter,reduce等)
  2. python-leepcode-作用解析 - 5-27
  3. 全球及中国拉丝润滑剂粉末行业投资潜力及发展战略规划报告2021-2027年
  4. 跟小段一起学Solaris(20)---ipFilter防火墙
  5. 专栏-美国人口和都市区
  6. wxWidgets:wxTimePickerCtrl类用法
  7. js时间搓化为今天明天_来揭秘化妆品为啥会搓泥?
  8. 【C语言】Find The Single Dog(标志变量的使用)
  9. pytorch卷积神经网络_【深度学习】卷积神经网络图片分类案例(pytorch实现)
  10. 力扣 26.删除有序数组中的重复元素
  11. python如何使用sdk_Python_sdk首页、文档和下载 - 优图人脸识别sdk - OSCHINA - 中文开源技术交流社区...
  12. python ----元组方法以及修改细节
  13. UVA11582 Colossal Fibonacci Numbers!【快速模幂+数列模除】
  14. Spark RDD 之间的依赖关系
  15. 大数据毕设/课设 - 基于大数据的医疗与疾病监控大数据可视化设计与实现
  16. 爱情骗我说有个地方叫地久天长
  17. java三种功能加强模式
  18. ROS导航调参经验总结(Teb算法)
  19. html基础、h5c3高级c3动画 、 JavaScript初高级、css预处理器和git 部分面试题
  20. 中华文明探源工程初步结果----DNA数据 中国人种源头分布一览表

热门文章

  1. 有关排序的贪心策略的一种证明思想
  2. 格式化文件系统命令所在目录——command not found
  3. 「新手向」koa2从起步到填坑
  4. eclipse新建maven项目和聚合项目
  5. 【原】浅谈KL散度(相对熵)在用户画像中的应用
  6. winform 拖动无边框窗体(调用Windows API)
  7. COOKIE和Session的原理及异同
  8. java基础:13.2 集合框架 - LinkedList、Queue
  9. centos7 jenkins 安装
  10. SQL Server Update:使用 TOP 限制更新的数据