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文件,存放数据如下: