我得到的请求失败,状态代码502。我试图从主页上获取数据,并将其显示到我正在建设的前端网站,但我不能得到我的生活原始html。
const express = require("express");
const cheerio = require("cheerio");
const axios = require("axios");
const app = express();
const PORT = process.env.PORT || 3000;
const website = "https://und.com";
try {
axios(website).then((res) => {
const data = res.data;
const $ = cheerio.load(data);
let content = [];
$(".sdc-site-tile__headline", data).each(function () {
const title = $(this).text();
const url = $(this).find("a").attr("href");
content.push({
title,
url
});
app.get("/", (req, res) => {
res.json(content);
});
});
});
} catch (error) {
console.log(error, error.message);
}
app.listen(PORT, () => {
console.log(`server is running on PORT:${PORT}`);
});
2条答案
按热度按时间8e2ybdfx1#
此问题需要更多信息。502 HTTP错误表示以下含义:
502错误是状态代码之一,它表示您连接到的Web服务器正在充当从另一个服务器中继的数据的代理,但该服务器返回了无效响应。
因为你试图抓取一个网站,很可能你被屏蔽了。这可能是因为你的用户代理包含的标志被他们的服务器嗅探到,从而被屏蔽了。
您可以将用户代理更改为显示您是实际浏览器的内容。请尝试在http标头中传递用户代理。
以下链接用于添加Axios的标题选项:
Force to use different user agent with js or axios
r7xajy2e2#
根据您的评论和建议用户代理避免502响应的existing answer,您似乎希望选择器
".post__meta h3 a:last-child"
:请注意,
try
/catch
不适用于.then
: