node.js网页爬虫

使用node开发一个小工具,扫描分子反应动力国家重点实验室新闻动态列表页前三页的信息(地址如下:http://www.sklmr.dicp.ac.cn/list.php?tid=1)要求打印出新闻名称,链接地址,发布时间。

例如在控制台打印

韩克利入选2016年度“中国科学院特聘研究员”计划 2016-06-14     http://www.sklmr.dicp.ac.cn/show.php?id=521

我室金属表面解离吸附动力学理论研究取得新进展    2016-06-12   http://www.sklmr.dicp.ac.cn/show.php?id=520

张大煜讲座第21期:加州理工学院William A. Goddard III教授 2016-05-04   http://www.sklmr.dicp.ac.cn/show.php?id=519


/**
*设计

*第一种:抓取一页打印一页。
*第二种:把三页全部抓取完后,存到数组中,统一打印。
*第一种方式较高效。使用第一种方式。
*/

/**
*思路:

*1.抓取网站html内容。
*2.获取抓取的html的必要内容。
*3.把获取内容存到数组。
*4.把数组内容输到控制台。

*/

    var http = require(‘http‘);                             //引入nodejs的http模块,该模块用于构建http服务和作为HttpClient使用。
    var cheerio = require(‘cheerio‘);                       //可以理解为服务端的Jquery。使用方法和客户端一样。
  //var promise = require(‘promise‘);                       //对异步编程进行流程控制,更加符合后端程序员的编程习惯。
  //var url = ‘http://www.sklmr.dicp.ac.cn/list.php?tid=1‘; //要抓取的网址,后面有拼接。

//抓取每一个节点的信息
function filterChapters(html){
    var $ = cheerio.load(html);                             //把HTML内容解析成DOM对象 并且可以像jquery css选择器查询那样对这个DOM进行筛选
    var articleList = $(‘td.text‘).find(‘tr‘);
    var articleArr = [];
    articleList.each(function() {
    var curEle = $(this);
    var title  = curEle.find(‘a.title10‘).text().replace(/\s*\r\n\s*/g,"");                  //获取文章标题
    var time = curEle.find(‘td.title11‘).text().replace(/\s*\r\n\s*/g,"");                   //获取文章时间
    var href = "http://www.sklmr.dicp.ac.cn/"+curEle.find(‘a.title10‘).attr(‘href‘);         //获取文章链接
    if( title!=null&&title!="")                                                              //有点小困难。因为DOM数据和直线是同一个等级,并且直线只有属性没有id。所以必须去除直线里面的tr空数据,否则会打印一部分空数据和错误信息。
    articleArr.push({
                        title:title,
                        time:time,
                        href:href
                    });
})
      return articleArr;
}
//在控制台打印信息
function printCourseInfo(courseData){
    courseData.forEach(function(item){
    var chapterTitle = item.title;
    var chaptertime = item.time;
    var chapterhref = item.href;
    console.log(chapterTitle+"\t"+chaptertime+"\t"+chapterhref+"\n");

    });
}
//可以异步下载任意的URL (通过 HTTP GET方法),在完成下载的时候,它会调用回调函数并把下载的内容当做参数传进去,并将其内容输出到控制台。
function getPageList(url){
  http.get(url, function(res) {
    var html = ‘‘
    res.on(‘data‘, function(data) {
    res.setEncoding(‘utf8‘);                              //设置buffer字符集
    html += data;                                         //拼接buffer
    })
    res.on(‘end‘, function() {
    // 将抓取的内容进行处理
    var courseData= filterChapters(html);
    printCourseInfo(courseData);
    })
  }).on(‘error‘, function(err) {
    console.log(‘错误信息:‘ + err)
  })
}

//或者请求前3页的数据。
list = [‘http://www.sklmr.dicp.ac.cn/list.php?tid=1‘,‘http://www.sklmr.dicp.ac.cn/list.php?tid=1&page=20‘,‘http://www.sklmr.dicp.ac.cn/list.php?tid=1&page=40‘];
for(var i=0;i<3;i++) {
    var url =list[i];
    getPageList(url);

}

/*
或者请求前3页的数据。tid=1,tid=1&page=20,tid=1&page=40,tid=1&page=60.....这样的规律可以拼接url。
var list = [];
for(var i=0;i<=40;i+20) {
    var url = url+page=i;
    list.push(getPageList(url));

}
//调用Promise的下面的all方法。参数是一个事件集合。
//Promise将会进行异步执行。但是最后的返回时机要根据最耗时的那个请求为标准。
//then(),可以接受两个参数(callback).第一个参数是成功(resolved)的回调。
//第二个参数是执行上个操作失败(rejected)的回调。
Promise
    .all(aa)
    .then(function(data) {
        console.dir(data);
    })

*/
时间: 10-19

node.js网页爬虫的相关文章

Node.js 网页瘸腿爬虫初体验

延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // 内置文件处理模块 var fs=require('fs'); // 创建一个将流数据写入文件的WriteStream对象 var outstream=fs.createWriteStream('./1.txt'); /

Node.js学习 爬虫下载豆瓣电影top250图片

利用node.js实现爬虫,并且爬取豆瓣电影top250的列表和图片. 1 什么是node.js 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎 2 什么是爬虫 (又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 3

node.js+mongodb 爬虫

demo截图: 本demo爬瓜子二手车北京区的数据 (注:需要略懂 node.js / mongodb 不懂也没关系 因为我也不懂啊~~~) 之所以选择爬瓜子二手车网站有两点: 一.网站无需登录,少做模拟登录: 二.数据连接没有加密,直接可以用: 网上很多node.js爬虫的栗子 但大多是一个页面的栗子,很少跟数据库结合的 所以我这个栗子是糖炒的 我的基本思路是这样的 1.先在mongodb里存所有页的连接地址的集合 2.在根据这些链接地址 一个一个的把详细信息爬下来 第一步在搜索页找到翻页的规

用Node.js写爬虫,撸羞羞的图片

说到爬虫,很多人都认为是很高大上的东西.哇塞,是不是可以爬妹纸图啊,是不是可以爬小片片啊.答案就是对的.爬虫可以完成这些东西的操作.但是,作为一个正直的程序员,我们要在法律允许范围内用爬虫来为我们服务,而不是为所欲为.(ps:此处应有掌声,谢谢.) 今天,我带来一个用Node.js写的爬虫.一说到教程呢,可能大多数人认为比较枯燥无味.那这样好了,我教大家爬妹纸图,上干货: 是不是瞬间有了动力了? 说到爬虫呢,其实从客观上来说,"所有网站皆可爬".互联网的内容都是人写出来的,而且都是偷懒

node.js基础模块http、网页分析工具cherrio实现爬虫

node.js基础模块http.网页分析工具cherrio实现爬虫 一.前言      说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherrio. 使用http直接获取url路径对应网页资源,然后使用cherrio分析. 这里我主要学习过的案例自己敲了一遍,加深理解.在coding的过程中,我第一次把jq获取后的对象直接用forEach遍历,直接报错,是因为jq没有对应的这个方法,只有js数组可以调用. 二.知识点    ①:supera

Node.js 爬虫初探

前言 在学习慕课网视频和Cnode新手入门接触到爬虫,说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherrio. 使用http直接获取url路径对应网页资源,然后使用cherrio分析. 这里我主要是把慕课网教学视频提供的案例自己敲了一边,加深理解.在coding的过程中,我第一次把jq获取后的对象直接用forEach遍历,直接报错,是因为jq没有对应的这个方法,只有js数组可以调用. 知识点 ①:superagent抓去网页工具.我暂时

Node.js爬虫-爬取慕课网课程信息

第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让我们方便的操作HTML,就像是用jQ一样 开始前,记得 npm install cheerio 为了能够并发的进行爬取,用到了Promise对象 //接受一个url爬取整个网页,返回一个Promise对象 function getPageAsync(url){ return new Promise(

使用Node.js作为后台进行爬虫

看了一遍又一遍Node.js但是没过多久就又忘了,总想找点东西来练练手,就发现B站首页搜索框旁边的GIF图特别有意思,想着是不是可以写一个小Node.js项目把这些图全部扒下来,于是带着复习.预习与探索的姿态就开始吧~ 步骤记录 爬取目标 B站首页右上角搜索框下面的GIF图片 初步流程图 初步流程图 一开始的想法很单纯,既然 每次刷新首页都会随机得到一张GIF动图,这些动图的url地址都没有规律可循,但我可以不断去请求首页URL并将目标图片的地址和标题扒下来,再次请求图片存在本地就好了,再考虑上

用node.js对一个英语句子分析页面进行一个小爬虫

最近遇到一个需求,就是要从一个英语句子分析的页面中,根据你输入的英语从句,点击开始分析按钮,这个页面就会将分析的结果解析出来,如 然后我们就是需要从这个页面中把这些解析好的数据(包括句子语法结构详解,句子相关词汇解释等)取出来,这时候我就想到之前学过node.js,这时候就来弄下node.js的小小的爬虫. 首先,电脑要先安装node.js,至于怎么安装,请google,或者找相关教程来看. 然后就需要了解下node,现在我先加载http模块,然后设置url的值,url就是你要爬的那个网页的地址