node抓取豆瓣数据

1、准备工作

1)安装node:node下载链接.

2)创建项目:使用Express创建项目.

2、安装依赖

使用npm install(cnpm install、yarn等)安装依赖

3、实现代码

创建一个movie.js文件,输入以下代码:

const fs = require('fs')
const axios = require('axios')
const cheerio = require('cheerio') // 抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现
const iconv = require('iconv-lite') // axios抓取网页中文乱码

async function getHtml(i = 0) {
  const url = `https://movie.douban.com/top250?start=${i * 25}&filter=`
  const res = await axios({
    url,
    responseType: 'stream'
  })
  return new Promise(resolve => {
    const chunks = []
    res.data.on('data', chunk => {
      chunks.push(chunk)
    })
    res.data.on('end', () => {
      const buffer = Buffer.concat(chunks)
      const str = iconv.decode(buffer, 'utf-8')
      resolve(str)
    })
  })
}

let moviesArr = []
async function fetchData() {
  for (let i = 0;i < 10;i++) {
    console.log(`当前是第${i}页`)
    const html = await getHtml(i)
    const $ = cheerio.load(html, { decodeEntities: false })
    const $list = $('.grid_view li')
    $list.each((index, item) => {
      const movies = {
        // 编号
        id: i * 25 + (index + 1),
        image: $(item).find('a img').attr('src'),
        src: $(item).find('a').attr('href'),
        title: $(item).find('.title').text(),
        other: $(item).find('.other').text(),
        playable: $(item).find('.playable').text(),
        rating_num: $(item).find('.rating_num').text(),
        evaluate_num: $(item).find('.star span').eq(3).text(),
        info: $(item).find('.bd p').eq(0).text().trim(),
        quote: $(item).find('.bd p').eq(1).text().trim()
      }
      moviesArr.push(movies)
    })
  }
  fs.writeFileSync('data.json', JSON.stringify(moviesArr))
}
fetchData()

4、结果实现

在命令窗口中输入node movie.js,回车之后即可生成一个data.json文件,存放数据如下:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值