node使用cheerio库抓取数据demo

npm install axios cheerio
// 抓取豆瓣读书中的数据信息
const fs = require('fs');
const axios = require('axios').default;
const cheerio = require('cheerio');

// 目标地址
async function getDouBanHTML() {
    const { data } = await axios.get('https://book.douban.com/latest')
    return data;
}


// 拿到所有详情页的链接
async function getBookList() {
    const html = await getDouBanHTML();
    const $ = cheerio.load(html);
    const aElement = $('#content .grid-16-8 li .media__img a');

     return aElement.map((i, ele) => {
        const href = ele.attribs['href'];
        return href;
    }).get();
}


// 根据url 获取详情页的里的内容
async function getBookDetail(url) {
    const { data } = await axios.get(url);
    const $ = cheerio.load(data);
    const name = $('h1').text().trim();
    const imgUrl = $('#mainpic .nbg img').attr('src');
    const authTitle = $('#info span.pl').filter((i,item) => $(item).text().includes("作者"));
    const auth = authTitle.next('a').text() + authTitle.next('a').next('a').text();
    const publishTitle = $('#info span.pl').filter((i,item) => $(item).text().includes("出版年"));
    const publishDate = publishTitle[0].nextSibling.nodeValue;
    return {
        name,
        imgUrl,
        auth,
        publishDate
    }
}

// 主方法,获取所有的书籍信息
async function fetchAll() {
    const links = await getBookList();
    const proms = links.map(link => getBookDetail(link))
    Promise.all(proms).then(res => {
        fs.writeFileSync('data.json', JSON.stringify(res));
    });
}
fetchAll();

运行文件 node index.js 后,成功新增 data.json 文件,打开格式化如下:
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值