先打一个简单的通用框子

//根据爬取网页的协议 引入对应的协议, http||https
var http = require('https');
//引入cheerio 简单点讲就是node中的jquery jquery写法获取所得页面dom元素
var cheerio = require('cheerio');
//目标网址 这里是图片网址
var url = '';
//文件读写
var fs = require('fs');
//发送request请求
var request = require('request');
//防止中文乱码
var iconv = require('iconv-lite'); function getimage(url, page) {
//采用http模块向服务器发起一次get请求
http.get(url, function (res) { //get到x网址,成功执行回调函数
var html = ''; //用来存储请求网页的整个html内容
var htmlarr = [];
var htmllength = 0;
//监听data事件,每次取一块数据
res.on('data', function (chunk) {
// html += chunk;
htmlarr.push(chunk);
htmllength += chunk.length;
});
//监听end事件,如果整个网页内容的html都获取完毕,就执行回调函数
res.on('end', function () {
html = Buffer.concat(htmlarr,htmllength);
html = iconv.decode(html,'gb2312');
var $ = cheerio.load(html,{decodeEntities: false}); //采用cheerio模块解析html
//fs.stat 判断文件夹是否存在 ./2717/
fs.stat("./2717/" + page, (err, stats) => {
if(stats){
save($,page)
return
}
// fs.mkdir 没有文件夹就创建文件
fs.mkdir("./2717/" + page, function (err) {
if (err) {
return console.error(err);
}
save($,page)
});
});
});
}).on('error', function (err) { //http模块的on data,on end ,on error事件
console.log(err);
});
}
function save($,page){
var imgarr = [];
console.log($('.w1200 .w1200 .w110 img').length);
$('.w1200 .w1200 .w110 img').each(function (val, index) {
var obj = {
url: $(this).attr('src'),
alt: $(this).attr('alt')
}
if('夏天少女系清新漂亮美甲背景图片' == $(this).attr('alt')) console.log($(this).attr('src'));
imgarr.push(obj)
request(encodeURI($(this).attr('src'))).pipe(fs.createWriteStream("./2717/" + page+'/'+$(this).attr('alt')+'.jpg'));
});
fs.appendFile("./2717/" + page+'/备注.txt', JSON.stringify(imgarr), 'utf-8', function (err) {
if (err) {
console.log(err);
}
});
}
for(var i = 1 ;i<12;i++){
url='https://www.2717.com/beautiful/beijingtupian/list_24_'+i+'.html';
getimage(url, i);
}

  

  上面的 html 就是页面所有的内容,就跟你谷歌浏览器 f12之后的elements 看到的一样,

这个只能爬静态页面,用ajax渲染的页面爬不到。

本人qq  :981900309

最新文章

  1. MySQL优化性能my.cnf详解
  2. Windows7如何安装Sqlite3
  3. [Android Tips] 2. Disable recent apps dialog on long press home button
  4. Android stuido viewpagerindicator的使用
  5. linux下MySQL 5.6源码安装
  6. CSAPP(2):程序的汇编表示(Linux版)
  7. 加JENKINS的SLAVE节点(LINUX)要注意的事项
  8. Linux的线程同步对象:互斥量Mutex,读写锁,条件变量
  9. Java基础知识强化之IO流笔记01:异常的概述和分类
  10. DOS窗口中文显示乱码
  11. LeetCode——N-Queens II
  12. CSS随笔1(CSS常用样式)
  13. Vimium快捷键记录
  14. git 入门教程之安装 git
  15. Linux下查询文件的md5,sha1值
  16. CLOS架构是啥?
  17. 【phpMQTT】phpMQTT详解以及处理使用过程中内存耗死问题
  18. C++11 Function 使用场景
  19. css之background-position属性实现雪碧图
  20. SqlBulkCopy 快速插入数据

热门文章

  1. Visual Studio 2015 NuGet Update-Package 失败/报错:Update-Package : Unable to load the service index for source https://api.nuget.org/v3/index.json.
  2. Cookie 判断页面是否为第一次打开 包括刷新
  3. sqlserver(查看被锁进程)
  4. (三)Knockout 控制流程
  5. eclipse 界面开发--windowbuilder
  6. Tomcat目录结构详解
  7. el内部支持运算表达式,外部不支持
  8. 一份详细的asyncio入门教程
  9. react的Virtual DOM
  10. NEO GUI 多方签名使用