node.js爬取美女图片

一、准备工作

首先找一个美女图片网站,这里我选用的是唯美女生,看起来像一个个人维护的网站。

分析页面结构:

1、主页主体部分就是图集列表;

2、URL的形式为 BaseUrl + "/page/" + PageIndex

3、每个图集点击进入就可获取全部图片,不用翻页,相对简单

分析页面元素:

1、图集==>body>div.update_area>div.update_area_content>ul.update_area_lists>li.i_list list_n2>a>img.waitpic

2、图片==>body>div.main>div.main_inner>div.main_left>div.content>div.content_left>p>a>img

二、代码

const superagent = require('superagent');
const charset = require('superagent-charset');
const async = require('async');
const fs = require('fs');
const request = require('request');
const cheerio = require('cheerio');
charset(superagent);const baseUrl = 'https://www.vmgirls.com/'
let type =  'page';
let page =  '12';
var route = `${type}/${page}`mkdirs('./image/'+page,function(){getPageUrl(baseUrl+route,page)
})function getPageUrl(url,page){superagent.get(url).charset('UTF-8').end(function(err, sres) {var items = [];var images = [];if (err) {console.log('ERR: ' + err);return;}else{var $ = cheerio.load(sres.text);$('div.update_area ul.update_area_lists li.i_list a').each(function(idx, element) {var $element = $(element);var url = $element.attr('href');var title = $element.attr('title');var name = page+"-"+idx+title;items.push({title: title,name: name,url: url});});getImgUrl(items,0,page)}        });
}function getImgUrl(its,ind,page){ if(ind>=its.length){console.log("page:"+page+"-"+ind)}else{it = its[ind];superagent.get(its[ind].url).charset('UTF-8').end(function(err, sres) {var items = [];if (err) {console.log('ERR: ' + err);}else{var $ = cheerio.load(sres.text);$('div.main div.main_left div.content div.content_left p img').each(function(idx, element) {var $element = $(element);var src = $element.attr('src');var name = it.name+"-"+idx+".jpg";items.push({name: name,src: src});});async.mapSeries(items,function(item, callback){                   setTimeout(function(){savedImg(item.src, item.name,page,function(){callback(null, item);});                    },100);                                       }, function(err, results){                getImgUrl(its,ind+1,page)});}       });}}function savedImg(img_src,name,page,callback) {       try{request.head(img_src);var writeStream = fs.createWriteStream('./image/'+page+'/'+name);var readStream = request({url: img_src, timeout: 15000})readStream.pipe(writeStream);readStream.on('end', function(response) {writeStream.end();});writeStream.on("finish", function() {callback();});}catch(ex){console.log(ex);callback();}
}function mkdirs(dirpath,_callback) {var dirArray = dirpath.split('/');fs.exists( dirpath ,function(exists){if(!exists){mkdir(0, dirArray,function(){console.log('文件夹创建完毕!准备写入文件!');_callback();});}else{console.log('文件夹已经存在!准备写入文件!');_callback();}});
}function  mkdir(pos, dirArray,_callback){var len = dirArray.length;console.log(len);if( pos >= len || pos > 10){_callback();return;}var currentDir = '';for(var i= 0; i <=pos; i++){if(i!=0)currentDir+='/';currentDir += dirArray[i];}fs.exists(currentDir,function(exists){if(!exists){fs.mkdir(currentDir,function(err){if(err){console.log('创建文件夹出错!');}else{console.log(currentDir+'文件夹-创建成功!');mkdir(pos+1,dirArray,_callback);}});}else{console.log(currentDir+'文件夹-已存在!');mkdir(pos+1,dirArray,_callback);}});
}

这里我用的是vscode,运行后先创建文件夹,随后根据URL获取图集的链接,然后遍历链接获取图集中图片并保存到本地。

更多内容看github:https://github.com/bloodymandoo/vmgirls

node.js爬取美女图片(一)相关推荐

  1. Scrapy爬取美女图片续集 (原创)

    上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...

  2. python爬取美女图片的练习

    python 爬取美女图片的练习 主要使用 xpath 定位获取 图片的链接 本次练习使用到os库 ,lmxl库 , requests库 import requests from lxml impor ...

  3. 使用python3爬取美女图片

    给大佬们观赏观赏,爬取美女图片,各位大佬们小心身子哈. #目标:爬取网页所有图片并保存到本地 #目标url = http://www.umei.cc/tags/meishaonv_1.htm impo ...

  4. Scrapy爬取美女图片续集

    上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...

  5. 爬取美女图片保存本地与入MySQL库(宅男福利)

    本文详细记录如何爬取美女图片,并将图片下载保存在本地,同时将图片url进行入库.保存在本地肯定是为了没事能拿出来养养眼啊,那入库就是为了定位图片啊,要懂点技术的话,还能搬运搬运做个小图片网站,不为别的 ...

  6. Python网络爬虫(四):selenium+chrome爬取美女图片

    说明: Python版本:Python IDE:PyCharm chrome版本:我的版本63 chromedriver.exe:因为是模拟浏览器访问,chrome需要再下载一个驱动,具体方式在我的上 ...

  7. python爬虫爬取美女图片(selenium)

    之前爬一个美女图片网站,因为是动态加载网站,爬下来的图片全是转呀转的GIF图,气死我了,学了selenium之后,龙王归来,势在必得 先看需要的库 from selenium import webdr ...

  8. 爬取美女图片实现翻页

    我们先上url,链接:https://www.xiurenwang.vip/bang?f=2 图片内容我就不展示了,自己可以打开看下 打开浏览器进行抓包,找个type为document的响应源码,搜索 ...

  9. 用 node.js 爬取煎蛋网照片(仅做学习之用)

    主要是用到 puppeteer npm i puppeteer 具体配置看官网 入口文件 const puppeteer = require('puppeteer'); const { mn } = ...

最新文章

  1. ICPC2008哈尔滨-A-Array Without Local Maximums
  2. 控件View动态设置高度时会卡顿、速度慢的情况解决
  3. Linux Kernel ‘_xfs_buf_find()’函数空指针引用拒绝服务漏洞
  4. mysql宽字节注入_转宽字节注入详解
  5. Github项目推荐|可视化 GAN 的训练过程
  6. java自适应table_Java 设置Word中的表格自适应的3种方式
  7. linux 查看进程的信号,Linux 进程信号查看与控制
  8. Web前端期末大作业--响应式健身会所网页设计(HTML+CSS+JS)实现
  9. Git笔记(14) 分支开发工作流
  10. mysql中两列拼接_python之Pandas读写操作mysql数据库
  11. c语言单词的一个字母变换,c语言:输入一行英文字符串,把每个单词第一个字母变为大写,输出修改后的字符串知道...
  12. MATLAB中移动平均滤波器smooth函数的用法
  13. jinfo java_Java自带的JVM性能监控及调优工具(jps、jinfo、jstat、jmap、javap)使用介...
  14. 安装MySql报错(This application requires .NET Framework x.x.x)
  15. HDOJ 1394 Minimum Inversion Number
  16. 一键报警(IP对讲)
  17. vue中使用leaflet加载地图影像并拾取坐标点
  18. UE4基础:自定义单例类(Singleton Class)
  19. [向前一小步]Android简单实现指纹识别登录
  20. 【C语言程序设计】C语言三色旗问题!

热门文章

  1. 桃源话六级考试参考答案
  2. 如何 生成7位数随机数
  3. 大包改小包_旧包改造,改成可以放在口袋里的小包包
  4. 清华大学历任计算机学院院长,历任领导
  5. Default Boot Device Missing or Boot Failed解决方法
  6. 【VS开发】【图像处理】ISP图像传感器处理器基础
  7. talib 中文文档
  8. 学习笔记 在B站上学习了pink老师的js,有个循环的作业:简易ATM
  9. Python 页面解析:Beautiful Soup库的使用
  10. uniapp或微信小程序修改swiper指示点样式