Node.js 使用爬虫批量下载网络图片到本地
图片网站往往广告众多,用Node.js写个爬虫下载图片,代码不长,省事不少,比手动一张张保存简直是天与地的区别。以前用Java也做过远程图片下载,但Node.js的下载速度更让人咂舌,这也是非阻塞式变成的好处。
下面代码是一个从mtl.ttsqgs.com下载图片的程序,图片地址是看网站源码看出来的,总共有多少张也可以在网页或源码里找到,然后就是顺藤摸瓜。爬虫无外乎找规律再写代码实现的套路。
// 内置http模块,提供了http服务器和客户端功能
var http=require("http");
// cheerio模块,提供了类似jQuery的功能
var cheerio = require("cheerio");
// 内置文件处理模块
var fs=require('fs');
// 请求参数JSON
var options;
// 请求并获得数据
var req;
var index=1; // 起始页码
var endIndex=43; // 终止页码
function downloadImg(pageNumber){
console.log("开始读取第"+pageNumber+"页");
// eg:http://mtl.ttsqgs.com/images/img/4527/3.jpg
options={
hostname:'mtl.ttsqgs.com',// 这里别加http://,否则会出现ENOTFOUND错误
port:80,
path:'/images/img/798/'+pageNumber+'.jpg',// 子路径
method:'GET',
};
req=http.request(options,function(resp){
var imgData = "";
resp.setEncoding("binary");
resp.on('data',function(chunk){
imgData+=chunk;
});
resp.on('end',function(){
var fileName="./xyyx/"+pageNumber+".jpg";
fs.writeFile(fileName, imgData, "binary", function(err){
if(err){
console.log("文件"+fileName+"下载失败.");
}
console.log(fileName+"下载成功");
});
});
});
// 超时处理
req.setTimeout(5000,function(){
req.abort();
});
// 出错处理
req.on('error',function(err){
if(err.code=="ECONNRESET"){
console.log('socket端口连接超时。');
}else{
console.log('请求发生错误,err.code:'+err.code);
}
});
// 请求结束
req.end();
// 43页调完
if(index<endIndex){
index++;
console.log('继续第'+index+'页');
start(index);
}
}
// 包一层函数
function start(i){
downloadImg(i);
}
// 开始
start(index);
2017年9月30日10:43:27
Node.js 使用爬虫批量下载网络图片到本地的更多相关文章
- Node.js mm131图片批量下载爬虫1.01 增加断点续传功能
这里的断点续传不是文件下载时的断点续传,而是指在爬行页面时有时会遇到各种网络中断而从中断前的页面及其数据继续爬行的过程,这个过程和断点续传原理上相似故以此命名.我的具体做法是:在下载出现故障或是图片已 ...
- Node.js mimimn图片批量下载爬虫 1.00
这个爬虫在Referer设置上和其它爬虫相比有特殊性.代码: //====================================================== // mimimn图片批 ...
- Node.js aitaotu图片批量下载Node.js爬虫1.00版
即使是https网页,解析的方式也不是一致的,需要多试试. 代码: //====================================================== // aitaot ...
- Node.js umei图片批量下载Node.js爬虫1.00
这个爬虫在abaike爬虫的基础上改改图片路径和下一页路径就出来了,代码如下: //====================================================== // ...
- Node.js abaike图片批量下载Node.js爬虫1.01版
//====================================================== // abaike图片批量下载Node.js爬虫1.01 // 1.01 修正了输出目 ...
- Node.js abaike图片批量下载Node.js爬虫1.00版
这个与前作的差别在于地址的不规律性,需要找到下一页的地址再爬过去找. //====================================================== // abaik ...
- Node.js nvshens图片批量下载爬虫 1.00
//====================================================== // www.nvshens.com图片批量下载Node.js爬虫1.00 // 此程 ...
- Node.js meitulu图片批量下载爬虫1.06版
//====================================================== // https://www.meitulu.com图片批量下载Node.js爬虫1. ...
- Node.js meitulu图片批量下载爬虫 1.05版(Final最终版)
//====================================================== // https://www.meitulu.com图片批量下载Node.js爬虫1. ...
随机推荐
- golang进行加密
crc64加密 package main import ( "fmt" "hash/crc64" ) func main(){ s:="打死udhan ...
- 键盘焦点和逻辑焦点(Logic Focus与Keyboard Focus )
键盘焦点和逻辑焦点(Logic Focus与Keyboard Focus ) 1.定义Keyboard Focus可以理解为物理焦点.就是整个桌面上可以响应键盘输入的地方,整个桌面在某个时刻只可能有一 ...
- python基础之程序交互与数据类型
一.程序交互 1.什么是程序交互? name=input('输入用户名:') #无论用户输入何种内容,input都会存成字符串格式 print(name) 2.为啥要有程序交互? 让计算机能够模拟人, ...
- [loj #6003]「网络流 24 题」魔术球 二分图最小路径覆盖,网络流
#6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 ...
- mysql:把DB1中A表a字段替换为DB2中B表b字段
UPDATE DB1.A SET a = ( SELECT b FROM DB2.B WHERE B.Id = A.id) 实例: UPDATE wordpress.`wp_posts` SET po ...
- Python出现"Non-ASCII character '\xe6' in file"错误解决方法
就没有问题,所以我猜测应该是编码的问题,在网上查了下答案,在第一行加上这样一句话: # encoding: utf-8 将编码格式改变为utf-8问题就解决了!
- RPD Volume 172 Issue 1-3 December 2016 评论03
Using Stable Free Radicals to Obtain Unique and Clinically Useful Data In Vivo in Human Subjects Abs ...
- 【可持久化Trie】模板
总算找到个能看懂的了,orz Lavender. #define INF 2147483647 #define N 100001 #define MAXBIT 31 int root[N],ch[N* ...
- [HDU6271]Master of Connected Component
[HDU6271]Master of Connected Component 题目大意: 给出两棵\(n(n\le10000)\)个结点的以\(1\)为根的树\(T_a,T_b\),和一个拥有\(m( ...
- python基础之二
1. 数据类型 1.1 数字 数字的作用:与数字相关,例如:手机号.QQ号.身份证号等,用数字表示 数字分为:整数(int).浮点数(float).复数(了解) 例子: age = 10 print( ...