EasySpider教程
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;
代码详解
关键词数组:
javascriptlet keywords = ["10", "14", "16", "17", "22"];
定义了一个包含多个关键词的数组。你可以根据需求将数组中的关键词替换为需要匹配的值。
XPath定位:
javascriptlet xpathQuery = "./td[5]";
通过XPath定位表格中的第五个单元格(
td[5]
),确保我们只对该列的内容进行判断。关键词匹配:
javascriptif (nodes.singleNodeValue && nodes.singleNodeValue.innerText.includes(keyword)) {
使用
includes()
方法来检查单元格的文本内容是否包含任意一个关键词。如果想要更精确的匹配,可以使用==
替换includes()
。结果判断:
一旦匹配成功,result
将被设置为true
,并通过return result;
将判断结果返回给调用方。EasySpider将根据这一结果决定是否提取数据。
处理精确匹配
如果需要更精确的匹配(即不希望“142”匹配“14”),可以使用如下代码:
javascript
if (nodes.singleNodeValue && nodes.singleNodeValue.innerText.trim() == keyword) {
这将确保只有当单元格的值与关键词完全匹配时,才会返回true
。
应用场景
此方案适用于如下场景:
- 表格数据爬取:从网页表格中筛选并提取包含特定关键词的行。
- 多关键词筛选:当需要从大量数据中筛选多个关键词时,该方法提供了高效的解决方案。
通过JavaScript和XPath的结合,能够轻松实现对当前循环项的多关键词判断。这种方法不仅灵活,而且适用于复杂的数据筛选场景。希望上述方法能够帮助你更高效地处理网页数据采集任务。
阅读全文
×
初次访问:反爬虫,人机识别