node.js练手--抓百度贴吧妹子图

简介: 模拟的是 http://www.oschina.net/code/snippet_226106_23414 这个python程序只是用node.

模拟的是 http://www.oschina.net/code/snippet_226106_23414 这个python程序

只是用node.js翻写一遍,练习练习

var baidu_base_url = 'http://tieba.baidu.com';

var http = require('http');
var url = require('url').parse(baidu_base_url + '/f?ie=utf-8&kw=%E5%A7%90%E8%84%B1');
var iconv = require('iconv-lite');
var BufferHelper = require('bufferhelper');
var $ = require('jquery');
var _ = require('underscore');
var saveRoot = "O:\\baidu\\"; //保存文件的根目录
var fs = require('fs');

String.prototype.replaceAll = function(s1, s2) {
	var demo = this
	while (demo.indexOf(s1) != - 1)
	demo = demo.replace(s1, s2);
	return demo;
}

function htmlBufferget(Url, callback) {
	http.get(Url, function(res) {
		var bufferHelper = new BufferHelper();
		res.on('data', function(chunk) {
			bufferHelper.concat(chunk);
		});
		res.on('end', function() {
			callback(bufferHelper.toBuffer());
		});
	});
}

//获取页面
function htmlget(Url, callback) {
	http.get(Url, function(res) {
		var bufferHelper = new BufferHelper();
		res.on('data', function(chunk) {
			bufferHelper.concat(chunk);
		});
		res.on('end', function() {
			var html = iconv.decode(bufferHelper.toBuffer(), 'GBK');
			callback($(html));
		});
	});
}

// 获取帖子中的图片地址
function getTieZiImg(url, fold) {
	htmlget(url, function(html) {
		html.find('img.BDE_Image').each(function(i, el) {
			var $img = $(el);
			var imgUrl = $img.attr('src');
			htmlBufferget(imgUrl, function(buffer) {
				var fileName = fold + "/" + i + ".png";
				fs.writeFile(fileName, buffer, 'binary', function(err) {
					if (err) throw err ;
					console.log(fileName + '  File saved.');
				});
			});
		});
	});
}

//主方法
htmlget(url, function(html) {
	html.find('a.j_th_tit').each(function(i, el) {
		var $a = $(el);
		var tieziUrl = baidu_base_url + $a.attr("href");
		var foldID = $a.attr("href").toString().replaceAll("/p/", "");
		var title = $a.html();
		//目录中的特殊字符
		title = title.replaceAll("/", "");
		title = title.replaceAll("?", "");
		title = title.replaceAll(",", "");
		title = title.replaceAll(":", "");

		//使用闭包在for中模拟多个线程
		(function(tieziUrl, title, foldID) {
			_.delay(function() {
				var fold = saveRoot + title;
				var exists = fs.existsSync(fold);
				console.log(fold);
				if (!exists) {
					console.log("不存在目录" + fold);
					fs.mkdirSync(fold);
				}
				getTieZiImg(tieziUrl, fold);
			},
			10);
		})(tieziUrl, title, foldID);
	});
});

1) 用到了node-jquery需要VC++2010的支持。所以通过NPM下包的时候先确认有VC++2010(用到VCbuild.bat,别拿netframework4.0里的,没用)

2)修改保存目录



目录
相关文章
|
2月前
|
前端开发 JavaScript
百度搜索:蓝易云【用JavaScript和HTML实现一个精美的计算器网页】
该计算器网页使用HTML定义了页面结构,CSS样式使其具有精美的外观,而JavaScript脚本实现了计算器的逻辑。用户可以通过按钮输入数字和操作符,并通过“=”按钮来进行计算,计算结果会显示在文本框中。
61 6
|
2月前
|
JavaScript 定位技术 API
[JS]百度地图设置城市
[JS]百度地图设置城市
28 1
|
2月前
|
JavaScript Ubuntu 前端开发
百度搜索:蓝易云【ubuntu安装开发javascript ubuntu script教程】
现在,你已经在Ubuntu上成功安装了JavaScript开发环境,可以开始编写和运行JavaScript代码了。注意,在编写代码之前,建议先创建一个项目文件夹,并在其中初始化npm,这样你可以管理项目的依赖项和配置。
48 5
|
2月前
|
Kubernetes 监控 调度
百度搜索:蓝易云【K8S中的Node管理是怎么回事?】
总体来说,Node管理是Kubernetes集群中的重要部分,确保集群中的节点状态可靠、资源高效利用和容器应用平稳运行。通过Master节点对Node进行管理,Kubernetes实现了高度自动化的容器编排和调度,为云原生应用提供了强大的管理能力。
43 1
|
2月前
|
存储 JavaScript Linux
百度搜索:蓝易云【CentOS 8上使用NVM安装特定版本的Node.js教程】
现在,你已成功安装和切换到特定版本的Node.js。希望这个教程能够帮助你在CentOS 8上使用NVM安装特定版本的Node.js。
107 2
|
2月前
|
JavaScript 关系型数据库 MySQL
百度搜索:蓝易云【Node.js写接口连接MySQL数据库教程】
现在,你的Node.js应用已经启动,可以通过访问 `http://localhost:3000/users`来获取所有用户的信息。注意替换上述代码中的数据库连接信息为你自己的实际数据。
69 0
|
8月前
|
JavaScript 定位技术 API
js调用百度地图api
js调用百度地图api
65 0
|
9月前
|
存储 JavaScript Linux
百度搜索:蓝易云【Alma Linux 9 上安装 Node.js 的 3 种不同安装教程!】
通过上述三种不同的安装教程,你可以在Alma Linux 9上安装Node.js。选择适合你的需求和喜好的方法进行安装,并确保在安装之后进行验证,以确保Node.js已成功安装。
317 0
|
9月前
|
JavaScript Linux 开发工具
百度搜索:蓝易云【如何在 GNU Linux 上通过 Nvm 安装 Node 和 Npm?】
现在,你已经成功在GNU Linux上通过Nvm安装了Node.js和Npm。你可以使用Nvm来管理和切换不同版本的Node.js,以满足你的项目需求。
165 0
|
10月前
|
JavaScript Linux
百度搜索:蓝易云【Centos7安装Node.js详细教程。】
另外,如果您需要全局安装Node.js模块,可能需要使用 `sudo`命令或以管理员身份运行相应命令。
199 0