爬取页面
分析
在爬取之前,着重观察点击分页符,地址栏的变化,在这个页面呢,可以发现每次点击一个,后面会有start =num &filter=,这个num每次递增25
点击页码2:https://movie.douban.com/top250?start=25&filter=
点击页码3:https://movie.douban.com/top250?start=50&filter=
点击页码4:https://movie.douban.com/top250?start=75&filter=
于是我在地址栏输入了https://movie.douban.com/top250?start=0&filter=
发现可以访问,并且显示内容与https://movie.douban.com/top250一致
思路
地址栏这么有规律,因此可以使用递归的方法,封装一个函数,可以在superagent的方法里面传入动态url,将获取到的数据 push进数组后,判断它是不是https://movie.douban.com/top250?start=225&filter=(因为这个是最后一页了)
如果是的话,就结束了,否则,继续调用函数
注意
数据采用追加的方式,因为写入的话数据会被覆盖的
本次采用的依旧是superagent+cheerio
demo
var superagent = require('superagent');
var cheerio = require('cheerio');
var fs = require('fs');
var path = require('path')
var start = 0;
var url = 'https://movie.douban.com/top250?start=';
var end = '&filter='
function getMovies(url, start, end) {
//superagent
superagent.get(url + start + end)
.end(function (err, res) {
if (err) {
return console.error(err);
}
var top250 = [];
//cheerio
let $ = cheerio.load(res.text);
$('li>.item>.info').each((index, ele) => {
var movie = {
picture: $(ele).prev().find('img').attr('src'),
title: $(ele).children('.hd').text().replace(/[\r\n]/g, "").replace(/\ +/g, ""),
details: $(ele).children('.bd').find('.star').prev().text().replace(/[\r\n]/g, "").replace(/\ +/g, ""),
score: $(ele).children('.bd').find('.star').find('.rating_num').text(),
nums: $(ele).children('.bd').find('.star').find('.rating_num').next().next().text().replace(/[\r\n]/g, "").replace(/\ +/g, ""),
quote: $(ele).children('.bd').find('.quote').text().replace(/[\r\n]/g, "").replace(/\ +/g, ""),
}
top250.push(movie);
})
fs.appendFile(path.resolve(__dirname, 'data.json'),
JSON.stringify(top250)
, () => {
console.log("保存成功")
})
if (start < 225) {
getMovies(url, (start + 25), end);
}
else {
console.log("爬取成功!");
}
});
}
//开始爬取页面数据
getMovies(url, start, end);
效果
注意:ctrl+A ctrl+K ctrl+F就是下图了

image.png
本文介绍了一个使用Superagent和Cheerio库爬取豆瓣电影Top250页面的JavaScript实现。通过观察URL变化规律,发现分页参数`start`每次递增25,利用递归方法动态构造URL并逐页抓取电影信息。数据存储采用追加方式写入`data.json`文件,直到抓取到第225页结束。整个过程中详细展示了如何解析HTML结构并提取所需数据。
&spm=1001.2101.3001.5002&articleId=116088320&d=1&t=3&u=f14127626bbe496a882d19e6dff1cf51)

被折叠的 条评论
为什么被折叠?



