You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用axios和cheerio抓取buymeacoffee网站支持者姓名的问题

问题原因

Buy Me a Coffee的支持者列表属于客户端动态渲染内容,初始静态HTML页面中不存在该类数据,页面加载完成后会通过JS异步发起接口请求拉取支持者信息,再渲染到DOM中。直接使用axios请求初始页面拿到的源码里没有支持者姓名,无法通过cheerio直接提取。

解决方案

方案1:使用无头浏览器模拟页面加载

使用Puppeteer这类无头浏览器工具,模拟浏览器打开页面,等待动态内容渲染完成后再提取对应数据,示例代码如下:

import puppeteer from 'puppeteer'
import cheerio from 'cheerio'

export default async function handler(req, res) {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  // 跳转目标页面,等待网络请求基本结束
  await page.goto('https://www.buymeacoffee.com/singtaousa', {
    waitUntil: 'networkidle2'
  })
  // 获取渲染完成后的完整HTML
  const pageContent = await page.content()
  const $ = cheerio.load(pageContent)

  const count = $('.text-fs-16.av-medium.clr-grey.xs-text-fs-14.mg-t-8').text().trim()
  const supporters = []
  // 替换为实际支持者姓名对应的元素选择器,可通过浏览器F12元素选择工具确认
  $('.supporter-item .name').each((i, el) => {
    const name = $(el).text().trim()
    if (name) supporters.push(name)
  })

  await browser.close()
  res.status(200).json({ count, supporters })
}

方案2:直接请求数据接口(推荐)

打开浏览器开发者工具切换到「网络」标签,刷新页面后筛选XHR/fetch请求,找到返回支持者列表的接口,直接请求该接口即可拿到结构化的JSON数据,无需解析DOM,性能和稳定性都更高,请求时注意和浏览器请求保持一致的头信息即可避免被拦截。

原有代码问题说明

原有逻辑遍历所有span标签会提取到大量无关内容,就算拿到完整渲染的DOM也无法直接得到有效支持者姓名,需要先定位到支持者姓名对应的特定类选择器再做筛选。

内容的提问来源于stack exchange,提问作者Hadif Hatta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:24:00