NodeJS写个爬虫,把文章放到kindle中阅读
2014-04-28 01:41
483 查看
这两天看了好几篇不错的文章,有的时候想把好的文章 down 下来放到 kindle 上看,便写了个爬虫脚本,因为最近都在搞 node,所以就很自然的选择 node 来爬咯~
本文地址:/article/4838985.html,转载请注明源地址。
所谓爬虫,可以简单理解为利用程序操作文件,只是这些文件不在本地,需要我们拉取过来。
上面短短七八行代码,就拿到了 AlloyTeam 首页的代码,真的十分简单,如果是 https:// 就得引用 https 模块咯,都是差不多的。
爬虫源码 spider.js
在 node 环境中:
就可以在同级目录下看到 index.md 文件了。至于如何放到 kindle 中,先了解下 OPF 格式,然后使用 Amazon 的 KindleGen 工具打包就行啦。
http://nodejs.org/api/http.html
本文地址:/article/4838985.html,转载请注明源地址。
所谓爬虫,可以简单理解为利用程序操作文件,只是这些文件不在本地,需要我们拉取过来。
一. 爬虫代码解析
1. 拿到目标页码源码
Node 提供了很多接口来获取远程地址代码,就拿 AlloyTeam 的页面举例吧,把他首页几篇文章的信息爬取过来。因为 AlloyTeam 使用的协议是 http:// ,本文就不介绍 Node 中 https:// 的使用了。var http = require("http"); var url = "http://www.alloyteam.com/"; var data = ""; // 创建一个请求 var req = http.request(url, function(res){ // 设置显示编码 res.setEncoding("utf8"); // 数据是 chunked 发送,意思就是一段一段发送过来的 // 我们使用 data 给他们串接起来 res.on('data', function(chunk){ data += chunk; }); // 响应完毕时间出发,输出 data res.on('end', function(){ // dealData(data); console.log(data); }); }); // 发送请求 req.end();
上面短短七八行代码,就拿到了 AlloyTeam 首页的代码,真的十分简单,如果是 https:// 就得引用 https 模块咯,都是差不多的。
2. 正则提取目标内容
先看下我们要抓取的内容:var http = require("http"); var fs = require("fs"); var url = "http://www.alloyteam.com/"; var data = ""; var req = http.request(url, function(res){ res.setEncoding("utf8"); res.on('data', function(chunk){ data += chunk; }); res.on('end', function(){ dealData(data); }); }); req.on('error', function(e){ throw e; }); req.end(); console.log("数据下载中..."); function dealData(data){ var reg = /<ul\s+class="articlemenu">\s+<li>\s+<a[^>]*>.*?<\/a>\s+<a href="(.*?)"[^>]*>(.*?)<\/a>[\s\S]*?<div\s+class="text">([\s\S]*?)<\/div>/g; var res = []; while(match = reg.exec(data)) { res.push({ "url": match[1], "title": match[2], "excerpt": match[3].replace(/(<.*?>)((.*?)(<.*?>))?/g, "$3").slice(0,120) }); } writeFile(res) } function writeFile(data){ var str = ""; for(var i = 0, len = data.length; i < len; i++){ str += "[" + data[i].title + "](" + data[i].url + ")\n>" + data[i].excerpt.replace(/\n\s*\n?/g, "\n>") + "\n\n"; } fs.writeFile('index.md', str, function (err) { if (err) throw err; console.log('数据已保存~'); }); }
爬虫源码 spider.js
在 node 环境中:
node spider.js
就可以在同级目录下看到 index.md 文件了。至于如何放到 kindle 中,先了解下 OPF 格式,然后使用 Amazon 的 KindleGen 工具打包就行啦。
三. 参考资料
http://nodejs.org/api/fs.htmlhttp://nodejs.org/api/http.html
相关文章推荐
- nodejs爬虫抓取搜狗微信文章详解
- 你所不知道的 Kindle - 阅读微信公众号文章
- 用python爬虫方式:刷文章阅读量
- 自动检测CSDN博客文章阅读次数的爬虫
- nodejs爬虫-妹子图,微信公众号文章,小说
- 用nodejs写爬虫同步百度FEX Weekly中的文章
- nodejs爬虫-通过抓取搜狗微信网站获取微信文章信息
- 一句js将博客园文章转成手机/kindle易于阅读样式
- 一句js将博客园文章转成手机/kindle易于阅读样式
- 爬虫抓取微信公众号文章及阅读点赞总结
- python 爬虫 爬取序列博客文章列表
- 阅读这篇文章,假设你不知道的傅里叶变换,然后来掐死我
- 在阅读了Nodejs文档后我学到的19件事
- nodejs安装以及环境配置(很好的node安装和配置文章,少走很多弯路)
- Python网络爬虫实训:如何下载韩寒博客文章
- TiDB 源码阅读系列文章(十七)DDL 源码解析
- nodejs实战:小爬虫
- Python爬虫小实践:爬取任意CSDN博客所有文章的文字内容(或可改写为保存其他的元素),间接增加博客访问量
- 我在阅读 NodeJS 文档中读出的19个套路
- kindle阅读订阅的google reader时,词典不能工作的修正