Node.js爬虫中如何获取.css字符串的前置字符以提取完整路径?
解决Node.js爬虫提取完整CSS路径的问题
你的现有代码只能定位到第一个.css的位置,没法提取完整路径,也没法找出页面中所有的CSS文件。用正则表达式可以高效解决这个问题,既能匹配所有CSS路径,又能提取到从边界字符(比如", ', =, >)到.css的完整内容。
具体实现代码
替换你原来的逻辑,用全局正则遍历所有匹配结果:
// 匹配CSS路径的正则,兼容带/不带引号、各种边界字符的情况 const cssRegex = /["']?([^"'>=]+?\.css)["']?/g; let matchResult; // 遍历所有匹配到的CSS路径 while ((matchResult = cssRegex.exec(htmlString)) !== null) { // 捕获组1就是提取到的完整CSS路径(不含前后引号) const fullCssPath = matchResult[1]; // 计算当前匹配项的行号 const contentBeforeMatch = htmlString.substring(0, matchResult.index); const lineNumber = contentBeforeMatch.split('\n').length; // 把结果存入你的pageObj(如果要存多个,建议用数组) pageObj.pageUrl = url; if (!pageObj.searchTerm[item]) { pageObj.searchTerm[item] = []; } pageObj.searchTerm[item].push(`CSS路径: ${fullCssPath},行号: ${lineNumber}`); } // 最后把pageObj存入jsonObj jsonObj[getPageId] = pageObj;
正则表达式说明
["']?:匹配可选的单引号或双引号(HTML中引入CSS时,路径可能带引号也可能不带)[^"'>=]+?:非贪婪匹配除了",',>,=之外的所有字符,避免过度匹配到其他无关内容\.css:精确匹配.css后缀/g:全局模式,会找出页面中所有符合条件的CSS路径
优势对比
- 不再只找第一个
.css,能捕获页面中所有CSS文件路径 - 自动处理带/不带引号的场景,提取干净的路径内容
- 保留了你原来需要的行号计算逻辑
内容的提问来源于stack exchange,提问作者MeltingDog
相关产品推荐
相关产品推荐

