从og:description提取天气关键词遇JS返回问题求助
解决从og:description提取关键词并排除天气类词汇的问题
嗨,我看你现在要做的是从og:description标签里提取关键词,同时把天气相关的词过滤掉,避免这类文章被抓进推荐收集器对吧?目前的问题应该是你还没对提取到的关键词做过滤处理,直接返回了原始的分割结果,所以天气词还会混在里面。
咱们一步步来修正代码:
首先,补全过滤逻辑,核心就是用数组的filter方法把排除列表里的词踢出去,还要处理一些细节问题(比如关键词前后的空格、大小写差异):
// 提取og:description内容并分割成关键词数组,做容错处理防止标签不存在报错 var keywords = $('meta[property="og:description"]').attr("content")?.split(',') || []; // 天气相关排除词列表,你可以继续补充更多 var excludes = ["storm", "storms", "tornado", "snow", "rain", "hurricane", "flood"]; // 过滤关键词:去掉排除列表里的词,同时处理空格和大小写 var filteredKeywords = keywords.filter(function(keyword) { // 先把关键词前后空格去掉,转成小写,避免因为空格或大小写导致匹配失败 var cleanedKeyword = keyword.trim().toLowerCase(); // 只保留不在排除列表里的关键词 return !excludes.includes(cleanedKeyword); }); // 现在返回这个过滤后的数组就可以了 return filteredKeywords;
这里几个关键细节要注意:
- 加了
?.和|| []:防止页面里没有og:description标签时,attr("content")返回undefined,调用split会直接报错,这样处理能保证keywords始终是一个数组,避免代码崩溃。 trim()和toLowerCase():很多时候og:description里的关键词会带前后空格,或者有大小写变化(比如"Storm"和"storm"),处理后能确保排除列表里的词都能匹配到。
如果你的需求更严格——比如要排除包含天气词的短语(比如"winter storm"这种),而不仅仅是完全匹配的词,那可以把过滤逻辑改成这样:
var filteredKeywords = keywords.filter(function(keyword) { var cleanedKeyword = keyword.trim().toLowerCase(); // 只要关键词里包含排除列表中的任何一个词,就过滤掉 return !excludes.some(exclude => cleanedKeyword.includes(exclude)); });
这样就能把所有带天气相关词汇的关键词都排除掉,剩下的就是非天气类的关键词了,返回这个结果就不会把天气相关文章抓进推荐收集器啦。
内容的提问来源于stack exchange,提问作者Dove
相关产品推荐
相关产品推荐

