数据抓取,爬虫豆瓣读书书籍信息

标题抓取豆瓣读书中的书籍信息

//思路:
//先爬取网页html
//将网页html进行分析,获取每个数据详情信息(在这里比较好找到作者,书名...等信息)
//将每本书籍的详情信息进行抓取,转换为自己想要的格式

//抓取豆瓣读书中的书籍信息
//cnpm i axios cheerio
const axios = require('axios').default
const cheerio = require('cheerio')

//抓取豆瓣读书源代码
async function getBooksHTML() {
    const resp = await axios.get('https://book.douban.com/tag/%E6%BC%AB%E7%94%BB')//要爬取的地址
    return resp.data
}

//将源代码转换为所有书籍页链接地址(这里是20个)
async function getBooksLnks() {
    const html = await getBooksHTML()
    const $ = cheerio.load(html)  //传入一个html,cheerio会返回一个类似jq的库,可以用jq方法读取操作
    const aElements = $("#subject_list .subject-list li a.nbg")
    console.log(aElements.length)
    const links = aElements.map((i, ele) => {
        const href = ele.attribs['href']
        return href
    }).get()
    return links
}

//根据书记详情页地址,得到该书籍的详细信息
async function getBookDetael(url) {
    const resp = await axios.get(url)
    const $ = cheerio.load(resp.data)
    const name = $("h1").text().trim()
    const imgUrl = $("#content #mainpic .nbg img").attr('src')
    const spans = $("#info  span.pl")
    //作者
    const authorSpan = spans.filter((i, ele) => {
        return $(ele).text().includes("作者")
    })
    const author = authorSpan.next("a").text()
    //出版年
    const publishSpan = spans.filter((i, ele) => {
        return $(ele).text().includes("出版年")
    })
    const publishDate = publishSpan[0].nextSibling.nodeValue.trim()
    return {
        name, imgUrl, author, publishDate
    }
    // consolesd.log(name, imgUrl, author,publishDate)
}

//获取所有的书籍信息
async function fetchAll() {
    const links = await getBooksLnks()  //得到所有书籍详情页地址
    const proms = links.map((ele) => {
        return getBookDetael(ele)
    })
    return Promise.all(proms)
}

fetchAll().then(res => {
    console.log(res)  //最终得到想要爬取的结果
})


地方
爬取成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值