Javascript编程实践

用nodejs抓取178小说

昨天熄灯之前在178网看轻小说,结果看到一半停电了。我一怒之下决定用nodejs写一段脚本把剩下的小说抓取到txt文档,这样就能在熄灯之前的十几秒钟把想看小说提前下载下来。代码如下:

var http = require('http');
var fs   = require('fs');
var $ = require('jquery');
var iconv = require('iconv-lite');
var wOpition = {
	flags:'w',
	encoding:'utf-8',
	mode:0666
}
var weburl = 'http://xs.dmzj.com';

var starturl = '/1224/4376/27626.shtml';

var fileWriteStream = fs.createWriteStream('novel2.txt',wOpition);

var savenovel = function(html){
	var $doc = $(html);
	var novel = $doc.find('div.novel_text').text();
	//还需加上换行
	fileWriteStream.write(novel);
}

var gethtml = function(url,callback){
	http.get(url,function(res){
		res.setEncoding('binary');
		var html = '';
		console.log('Get Response: ' + res.statusCode);
		res.on('data',function(data){
			html += data;
		}).on('end',function(){
			var buf = new Buffer(html,'binary');
			var str = iconv.decode(buf,'utf-8');
			console.log('Download: ' + url);
			callback(str.toString());
		});
	}).on('error',function(e){
		console.log('Get Error: ' + e.message)
	});
};


var get178text = function(url){
	gethtml(url,function(data){
		var $doc = $(data);
		savenovel(data);
		var pagenums = $doc.find('div.pages').find('span option').each(function(i,p){
			var $t = $(p);
			if (i != 0 && $t.length > 0) {
				gethtml(weburl + $t.attr('value'),function(data){
					savenovel(data);
				});
			};
		});
		var pages = $doc.find('div.pages_novel').find('a#next_chapter').attr('href');
		var cururl = weburl + pages;
		if(cururl.toString() == url.toString()){
			//console.log('Download Complete');
			return;
		}
		get178text(cururl);
	});
}

get178text(weburl + starturl);

nodejs写爬虫真是超方便。。。写代码只用几十分钟,windows下安装nodejs的jquery模块折腾了好久。

等我写完,发现178上的小说是直接可以下载的。。。

无所谓了,技术宅就该为自己所爱之物不断的发掘自己潜力。


等我有时间再改进一下,再顺便总结一下jquery中筛选器的用法:

1.把小说保存为html格式,让阅读体验更好

2.同时下载图片


网页源码中汉字的HTML编码和具体的汉字的互相转换

我们在查看html源码时经常会看到网页中一堆"计算机操作系统"这样的数字,但网页中显示的却是汉字。html中每个字符都有对应的编码。

可以使用var char = String.fromCharCode(code ),来把数字变成字符:
//JS中的汉字与HTML编码的互相转换
(function(){
	var str = "计算机操作系统";
	var pattern = /\d{1,}/g;
	var chars;
	chars = str.match(pattern);
	var cn = '';
	for(var i = 0; i < chars.length; ++i) {
		var s = chars[i];
		s = String.fromCharCode(s);
		cn += s;
	}
	console.log(cn);
}());

如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。JS正则表达式就是这么简单:

var fs = require('fs');

var fileWriteStream = fs.createWriteStream('NJSON.JS',{ 
	flags: 'w',
	encoding: 'utf-8',
	mode: 0666 });

var fileReadStream = fs.createReadStream("JSON.txt",{
	flags : 'r',
	encoding : 'utf-8',
	mode : 0666});
	
//fileReadStream.pipe(fileWriteStream);
	
fileReadStream.on('data',function(data){
	data =  data.toString().replace(/&#\d+;/g,function(word){
		return String.fromCharCode(word.substr(2,word.length - 3));
	});
	console.log(data);
	fileWriteStream.write(data);
});

使用var code = char.charCodeAt(),把字符转换成数字:
(function(){
	var cn = '计算机操作系统';
	var str = '';
	for(var i = 0; i < cn.length; ++i) {
		var code = cn[i].charCodeAt();
		str += '&#' + code + ';'
	}
	console.log(str);
}());
在充满仪式感的生活里,一款能传递心意的小工具总能带来意外惊喜。这款基于Java开发的满屏飘字弹幕工具,正是为热爱生活、乐于分享的你而来——它以简洁优雅的视觉效果,将治愈系文字化作灵动弹幕,在屏幕上缓缓流淌,既可以作为送给心仪之人的浪漫彩蛋,也能成为日常自娱自乐、舒缓心情的小确幸。 作为程序员献给crush的心意之作,工具的设计藏满了细节巧思。开发者基于Swing框架构建图形界面,实现了无边框全屏显示效果,搭配毛玻璃质感的弹幕窗口与圆润边角设计,让文字呈现既柔和又不突兀。弹幕内容精选了30条治愈系文案,从“秋天的风很温柔”到“你值得所有温柔”,涵盖生活感悟、自我关怀、浪漫告白等多个维度,每一条都能传递温暖力量;同时支持自定义修改文案库,你可以替换成专属情话、纪念文字或趣味梗,让弹幕更具个性化。 在视觉体验上,工具采用柔和色调生成算法,每一条弹幕都拥有独特的清新配色,搭配半透明渐变效果与平滑的移动动画,既不会遮挡屏幕内容,又能营造出灵动治愈的氛围。开发者还优化了弹幕的生成逻辑,支持自定义窗口大小、移动速度、生成间隔等参数,最多可同时显示60条弹幕,且不会造成电脑卡顿;按下任意按键即可快速关闭程序,操作便捷无负担。 对于Java学习者而言,这款工具更是一份优质的实战参考。源码完整展示了Swing图形界面开发、定时器调度、动画绘制、颜色算法等核心技术,注释清晰、结构简洁,哪怕是初学者也能轻松理解。开发者在AI辅助的基础上,反复调试优化细节,解决了透明度控制、弹幕碰撞、资源占用等多个问题,这份“踩坑实录”也为同类项目开发提供了宝贵经验。 无论是想给喜欢的人制造浪漫惊喜,用满屏文字传递心意;还是想在工作间隙用治愈文案舒缓压力,或是作为Java学习的实战案例参考,这款满屏飘字弹幕工具都能满足你的需求。它没有复杂的操作流程,无需额外配置环境,下载即可运行,用最纯粹的设计传递最真挚的
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值