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

如何修改axios+cheerio爬虫代码 抓取含jam字符串的Blibli商品名称及链接

代码调整方案

修改后完整代码

const PORT = process.env.PORT || 8000
const express = require('express')
const axios = require('axios')
const cheerio = require('cheerio')
const app = express()

const categories = [
    {
        name: 'jamtangan',
        address: 'https://www.blibli.com/c/2/aksesoris-jam-tangan/AK-1000005/JA-1000225',
        // 补充站点主域名,用于拼接相对路径的商品链接
        base: 'https://www.blibli.com'
    }
]

const products = []

categories.forEach(category => {
    // 新增UA头,避免被站点反爬拦截
    axios.get(category.address, {
        headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
        }
    })
    .then(response => {
        const html = response.data
        const $ = cheerio.load(html)

        // 先定位商品容器,再提取信息,避免抓取到无关链接
        $('.product__item').each(function () {
            const $currentItem = $(this)
            const title = $currentItem.find('.product__title').text().trim()
            // 仅保留标题包含jam的商品,忽略大小写
            if (title.toLowerCase().includes('jam')) {
                const relativeUrl = $currentItem.find('a').attr('href')
                products.push({
                    title,
                    // 自动拼接相对路径为可访问的完整链接,比手动拼接更稳妥
                    url: new URL(relativeUrl, category.base).href,
                    source: category.name
                })
            }
        })
    })
    // 新增错误捕获,避免单个分类请求失败影响整体服务
    .catch(err => console.log(`分类${category.name}抓取失败:`, err.message))
})

app.get('/', (req, res) => {
    res.json('欢迎使用商品抓取API')
})

app.get('/products', (req, res) => {
    res.json(products)
})

app.listen(PORT, () => console.log(`服务运行在端口${PORT}`))

核心修改点

  • 补全categories配置里的base字段为站点主域名,解决商品链接是相对路径无法直接访问的问题
  • 调整DOM选择逻辑:优先定位.product__item商品容器,再从容器内提取标题和链接,避免原来直接选a标签抓到大量无关内容的问题
  • 新增标题过滤逻辑:提取标题后判断是否包含jam字符串,同时忽略大小写,保证匹配精准度
  • 新增请求UA头和错误捕获逻辑,降低反爬拦截概率,提升代码稳定性
  • 用new URL()拼接链接,避免手动拼接时出现斜杠重复/缺失的问题

内容的提问来源于stack exchange,提问作者Shaiful Rizal Shaharudin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:54:00