nodejs抓取动态网页(使用node开发一个小工具,扫描分子反应动力(图) )

优采云 发布时间: 2021-10-27 12:00

  nodejs抓取动态网页(使用node开发一个小工具,扫描分子反应动力(图)

)

  使用node开发一个小工具,扫描分子反应动力学国家重点实验室新闻列表页面的前三页(地址如下:)。需要打印新闻名称、链接地址和发布时间。

  比如在控制台打印

  韩克力入选2016年度“中国科学院特聘研究员”2016-06-14

  我室金属表面解离和吸附动力学理论研究取得新进展2016-06-12

  张大宇讲座第21期:加州理工学院William A. Goddard III教授2016-05-04

<p><br /><br /><br /><br />/**

*设计

*第一种:抓取一页打印一页。

*第二种:把三页全部抓取完后,存到数组中,统一打印。

*第一种方式较高效。使用第一种方式。

*/

/**

*思路:

*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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线