EasySpider判断是否包含多个关键词中的任意一个

在数据表格中,当我们需要筛选特定列中的多个关键词时(如提取深度字段中包含“10”、“14”、“16”或更多关键词的条目),标准的XPath无法直接实现这一复杂的多关键词匹配。通过JavaScript,可以实现循环项的关键词判断功能,并在满足条件时提取相关数据。

解决方案

通过以下JavaScript代码,可以轻松实现多关键词的判断,并确保仅在满足条件时提取数据。你可以将此代码直接用于EasySpider的“代码/脚本内容”下方的文本框中。

    
javascript
let keywords = ["10", "14", "16", "17", "22"]; // 定义多个关键词数组
let result = false;  // 初始化结果为false

// 遍历关键词数组,检查当前行的第五个表格元素是否包含关键词
for (let keyword of keywords) {
  // 定位当前行的第五个td元素
  let xpathQuery = "./td[5]";
  let nodes = document.evaluate(xpathQuery, arguments[0], null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
  
  // 检查该单元格内容是否包含任意关键词
  if (nodes.singleNodeValue && nodes.singleNodeValue.innerText.includes(keyword)) {
    result = true;  // 如果匹配到关键词,将结果设置为true
    break;  // 退出循环,避免重复匹配
  }
}

// 返回结果,决定是否提取当前行数据
return result;

代码详解

  1. 关键词数组

        
    javascript
    let keywords = ["10", "14", "16", "17", "22"];
    

    定义了一个包含多个关键词的数组。你可以根据需求将数组中的关键词替换为需要匹配的值。

  2. XPath定位

        
    javascript
    let xpathQuery = "./td[5]";
    

    通过XPath定位表格中的第五个单元格(td[5]),确保我们只对该列的内容进行判断。

  3. 关键词匹配

        
    javascript
    if (nodes.singleNodeValue && nodes.singleNodeValue.innerText.includes(keyword)) {
    

    使用includes()方法来检查单元格的文本内容是否包含任意一个关键词。如果想要更精确的匹配,可以使用==替换includes()

  4. 结果判断
    一旦匹配成功,result将被设置为true,并通过return result;将判断结果返回给调用方。EasySpider将根据这一结果决定是否提取数据。

处理精确匹配

如果需要更精确的匹配(即不希望“142”匹配“14”),可以使用如下代码:

    
javascript
if (nodes.singleNodeValue && nodes.singleNodeValue.innerText.trim() == keyword) {

这将确保只有当单元格的值与关键词完全匹配时,才会返回true

应用场景

此方案适用于如下场景:

  • 表格数据爬取:从网页表格中筛选并提取包含特定关键词的行。
  • 多关键词筛选:当需要从大量数据中筛选多个关键词时,该方法提供了高效的解决方案。

通过JavaScript和XPath的结合,能够轻松实现对当前循环项的多关键词判断。这种方法不仅灵活,而且适用于复杂的数据筛选场景。希望上述方法能够帮助你更高效地处理网页数据采集任务。

阅读全文
AI工具教程
免费领取AI学习资料 进AI副业交流群
礼物
AI工具教程
免费领取AI学习资料 进AI副业交流群