豆瓣书籍数据抓取(学习笔记)

该博客演示了如何利用axios获取网页HTML,然后使用cheerio解析HTML,提取豆瓣最新书籍的链接,并进一步获取书籍的详细信息,包括作者、书名、图片URL和出版日期。最后,将这些信息保存到数据库中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

axios和cheerio

例子,对豆瓣推荐的书籍进行数据抓取,url:https://book.douban.com/latest

const axios = require('axios').default;
const cheerio = require('cheerio');
const Boook = require('../models/Book');
async function getBooksHTML() {
    const resp = await axios.get("https://book.douban.com/latest");
    return resp.data;

}
// 拿到书籍的详细地址
async function getBooksList() {
    const html = await getBooksHTML();
    const $ = cheerio.load(html);
    const lis = $('#content .grid-12-12 li a.cover');
    const links = lis.map((i, ele) => {
        const href = ele.attribs["href"];
        return href;
    }).get();
    return links;
}
// getBooksList().then(resp => {
//     console.log(resp);
// });

// 通过书记的详细地址拿到书籍的详细信息
async function getBookDetail(detailUrl) {
    const resp = await axios(detailUrl);
    const $ = cheerio.load(resp.data);
    const name = $("h1").text().trim();
    const imgurl = $('#mainpic .nbg img').attr('src');
    const spans = $("#info span.pl");
    const authorSpan = spans.filter((i, ele) => {
        return $(ele).text().includes("作者");
    })
    const pubilshSpan = spans.filter((i, ele) => {
        return $(ele).text().includes("出版年");
    })
    const publishDate = pubilshSpan[0].nextSibling.nodeValue.trim();
    const author = authorSpan.next("a").text();
    return {
        author,
        name,
        imgurl,
        publishDate

    }
}

//拿到详细信息的总和
async function fetchAllBooks() {
    const links = await getBooksList();//得到书籍详情页数组
    const promise = links.map(link => {
        return getBookDetail(link)
    });

    return Promise.all(promise);

}
//存入数据库
async function saveToDB() {
    const books = await fetchAllBooks();
    Boook.bulkCreate(books);
    console.log('书籍信息更新到数据库');
}
saveToDB();

Navicat book表:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值