如何将包含特定字符串的URL添加至数组?Node.js爬虫代码优化
嘿,这个需求其实很好实现,只需要在收集链接的环节加个简单的判断就行~
实现方法:筛选包含特定字符串的URL
你的核心需求是在抓取页面<a>标签的href属性时,只保留包含指定字符串的链接。我们可以在将链接推入数组前添加条件判断,同时还要处理href可能为空的情况,避免出现意外报错。
这里是修改后的完整可运行代码:
var request = require('request'); var cheerio = require('cheerio'); var url = "https://www.mismarcadores.com"; // 定义你要筛选的特定字符串,替换成你需要的内容就行 const targetString = "futbol"; request(url, function(err, resp, body) { if (err) throw err; var $ = cheerio.load(body); var addUrl= []; $('a').each(function (i, element) { var a = $(this); var href = a.attr('href'); // 关键判断:先确保href存在,再检查是否包含目标字符串 if (href && href.includes(targetString)) { addUrl.push(href); } }); // 修正原代码的小错误:原代码里的array是笔误,应该用addUrl console.log(addUrl[0]); });
关键改动说明:
- 新增了
targetString变量,用来存放你要筛选的特定字符串,你可以根据需求替换成任意内容(比如"resultados"、"basketball"等)。 - 在推入数组前添加了
if (href && href.includes(targetString))判断:href先确保这个属性存在,避免处理null或undefined值导致的报错;href.includes(targetString)检查当前链接是否包含你指定的字符串。
- 修正了原代码里的笔误:最后打印的是
addUrl[0]而不是array[0],原代码里没有array这个变量,会直接报错。
额外扩展(可选):
如果你需要不区分大小写的筛选(比如同时匹配"Futbol"和"futbol"),可以把判断逻辑改成这样:
if (href && href.toLowerCase().includes(targetString.toLowerCase())) { addUrl.push(href); }
这样就能轻松实现只收集包含特定字符串的URL啦!
内容的提问来源于stack exchange,提问作者pepe
相关产品推荐
相关产品推荐

