如何使用JS的.filter()函数筛选数组对象并抓取指定<p>标签尺寸信息
提取目标尺寸信息的解决方案
你的核心问题是当前代码抓取了整个区块的全部文本,没有筛选内部的<p>标签。可以通过以下步骤集成filter()函数来精准提取尺寸信息:
- 定位目标区块内的所有
<p>标签:将查询选择器从整个区块改为区块下的<p>元素,确保只处理需要筛选的标签。 - 用
filter()筛选尺寸相关内容:根据目标网站的文本特征(比如包含“尺寸”关键词、数字加单位的格式),过滤出符合条件的<p>标签。 - 提取并整理文本:从过滤后的标签中提取纯文本,返回结果数组。
修改后的完整代码如下:
await page.waitForSelector(".responsive-body-3-2.mr12-lg.mb2-sm.pt3-sm.flx-gro-sm-1.flex-parent.d-sm-flx.flx-dir-sm-c.flx-jc-sm-sb.flx-ai-sm-fs p"); let sizeInfo = await page.evaluate(() => { // 选中目标区块下的所有p标签 let pTags = document.querySelectorAll(".responsive-body-3-2.mr12-lg.mb2-sm.pt3-sm.flx-gro-sm-1.flex-parent.d-sm-flx.flx-dir-sm-c.flx-jc-sm-sb.flx-ai-sm-fs p"); // 过滤出包含尺寸信息的p标签,根据实际文本特征调整判断逻辑 let sizeTags = Array.from(pTags).filter(tag => { const text = tag.innerText.trim(); // 示例规则:匹配含"尺寸"字样,或带有数字+常见长度单位的文本 return text.includes("尺寸") || /\d+(cm|inch|mm|cm×|inch×)/i.test(text); }); // 提取过滤后的文本 let size = sizeTags.map(tag => tag.innerText.trim()); return size; }); console.log('Size has been collected!', sizeInfo);
注意事项:
- 务必根据目标网站的实际文本格式调整
filter()里的判断规则,比如如果尺寸文本是“Size: 10×15cm”,就把判断条件改成text.includes("Size")或者对应正则。 - 使用
Array.from()将querySelectorAll返回的NodeList转为数组,才能调用数组的filter()和map()方法。
内容的提问来源于stack exchange,提问作者JediSZN
相关产品推荐
相关产品推荐

