java爬取js分页数据,nodejs 爬虫系列二(实现分页数据的爬取)

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

爬取页面

分析

在爬取之前,着重观察点击分页符,地址栏的变化,在这个页面呢,可以发现每次点击一个,后面会有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就是下图了

96141205422a

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值