使用node怎么爬取一个网站的数据?

Node 是一个让 JavaScript 运行在服务端的开发平台,在Node启动的很短时间内,社区就已经贡献了大量的扩展库(模块)。其中很多是连接数据库或是其他软件的驱动。

搭建环境:

1、创建一个文件夹,进入并初始化一个package.json文件。

npm init -y

2、安装相关依赖:

npm install --save koa      
npm install --save cheerio 
// 后面会用到,用于抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现

爬取网站数据的代码如下(文件名:demo2.js):

var http = require('http') // Node.js提供了http模块,用于搭建HTTP服务端和客户端
var url = 'http://www.m4yy.com/type/2.html' //输入任何网址都可以
 
http.get(url,function(res){  //发送get请求
  var html=''
  res.on('data',function(data){
    html += data  //字符串的拼接
  })
  res.on('end',function(){
    console.log(html)
    })
}).on('error',function(){
  console.log('获取资源出错!')
})

实现效果:

1 (2).jpg-600

在刚刚的js文件中引入cheerio模块,然后加载所需要的html内容。

var $ = cheerio.load(html)  // 加载需要的html

为了方便使用,这里封装一个函数:

var http = require('http') // Node.js提供了http模块,用于搭建HTTP服务端和客户端
var url = 'http://www.m4yy.com/type/2-3.html' //输入任何网址都可以
var cheerio = require('cheerio') // 抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现

http.get(url,function(res){  //发送get请求
  var html=''
  res.on('data',function(data){
    html += data  //字符串的拼接
  })
  res.on('end',function(){
    var courseData = filterChapters(html)
    console.log('courseData', courseData)
  })
}).on('error',function(){
  console.log('获取资源出错!')
})

function filterChapters(html) {
  var $ = cheerio.load(html)  // 加载需要的html
  var chapters = $('.movie-item')  //在html里寻找需要的资源的class
  var courseData = [] // 创建一个数组,用来保存资源
  chapters.each(function(item, index) {  //遍历html文档
      var chapter = $(this)
      var chapterTitle = chapter.children('a').attr('title') 
      var tvUrl = chapter.children('a').attr('href').split('show/')[1]
      var imgUrl = chapter.find('img').attr('src')
      var updateStatus = chapter.find('.hdtag').text()
      var type = chapter.find('.otherinfo a').text()
      var url = `http://www.m4yy.com/show/${tvUrl}`
      courseData.push({
        chapterTitle: chapterTitle,
        tvUrl: tvUrl,
        imgUrl: imgUrl,
        updateStatus: updateStatus,
        type: type,
        url: url
      })
  })
  return courseData //返回需要的资源
}

再次执行node demo2.js 此时结果如下:

2.jpg-600

以上就是使用node怎么爬取一个网站的数据?的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Node.js答疑