如何修改Node.js爬虫代码获取文章标题、链接及图片?
Node.js 爬虫代码修改方案
修改要点:
- 调整CORS中间件顺序,确保所有路由都能应用跨域规则
- 重构抓取逻辑,同时提取文章标题、详情链接和配图地址
- 将响应格式改为JSON,方便前端解析结构化数据
- 移除无实际作用的
/post路由 - 统一错误返回格式,返回JSON类型的错误信息
修改后的完整代码:
const express = require("express"); const cheerio = require("cheerio"); const axios = require("axios"); const app = express(); // CORS中间件移到最前面,确保所有路由生效 app.use(function(req, res, next) { res.header('Access-Control-Allow-Origin', 'http://localhost:3000'); res.header('Access-Control-Allow-Methods', 'GET'); res.header('Access-Control-Allow-Headers', 'Content-Type'); next(); }); const PORT = process.env.PORT || 3002; const website = "https://und.com"; const options = { headers: { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" } }; app.get("/", (req, res) => { axios(website, options) .then(({data}) => { const $ = cheerio.load(data); const result = $(".post") // 以文章容器为基准,确保数据对应 .map((_, post) => { const $post = $(post); const titleEl = $post.find(".post__meta h3 a:last-child"); return { title: titleEl.text().trim(), link: `${website}${titleEl.attr("href")}`, // 拼接完整链接 image: $post.find(".post__thumbnail img").attr("src") || "无配图" }; }) .get(); // 返回JSON格式数据 res.json(result); }) .catch((error) => { console.log("抓取错误:", error); res.status(500).json({ code: 500, message: "抓取数据时发生错误" }); }); }); app.listen(PORT, () => { console.log(`服务器运行在端口: ${PORT}`); });
说明:
- 抓取逻辑以
.post文章容器为单位,确保标题、链接、配图属于同一篇文章,避免数据错位 - 链接通过拼接网站域名和相对路径生成完整可访问地址
- 如果文章没有配图,会返回"无配图"作为兜底值
- 响应统一使用JSON格式,前端可以直接解析成数组进行渲染
内容的提问来源于stack exchange,提问作者rpuh
相关产品推荐
相关产品推荐

