-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Example of JavaScript instruction for the current iteration in a conditional statement
判断条件中针对当前循环项的JavaScript指令示例。
如下图,如要采集表格中第五项深度字段包含“10”的条目,需要在循环中添加判断条件,并将条件设置为如下命令:
return document.evaluate("./td[5]", arguments[0], null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.innerText.indexOf("10") >= 0
原理:循环的XPATH为:/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr
,即循环检索表格中的每一行,如果条件判断简单设置为“当前循环项包含文本10”,那么不管是表格这一行的哪一项包含10都会提取当前行数据,不符合我们“只想采集当第五项’深度’字段包含10的行数据”的需求,因此需要写上面的命令。
命令中的./td[5]
是相对当前行/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr
内部的第5个td
元素,即深度
字段的值,arguments[0]
表示当前行元素,.singleNodeValue
为取结果的第一个Node节点,后面的innerText
为元素文本,indexOf
为字符串查找指令。
https://emagecompany.com/search.php?key=%E5%8D%8F%E4%BC%9A&page=1&total=360
示例任务json
文件在这里: https://github.com/NaiboWang/EasySpider/blob/master/Examples/JS%E5%88%A4%E6%96%AD%E6%9D%A1%E4%BB%B6%E7%A4%BA%E4%BE%8B.json
按照正常流程选中所有名单的<a>
标签然后点击“循环点击每个链接”选项,定义完提取详情页操作后,把点击元素和提取数据的操作放入条件判断中,再设置判断条件为“基于当前循环项的JavaScript命令返回值”:
命令为:
return arguments[0].nextSibling.nextSibling.innerText.includes("免费资源")
解释:
先点开F12审查元素,发现任意链接<a>
标签结构为:
即“免费资源”的字段在<font>
标签内,与当前<a>
标签是兄弟元素,即同级元素。则我们可以使用nextSibling
属性来获取相对当前元素arguments[0]
,即<a>
标签的下一个兄弟节点。由于在示例中,<br>
标签是<a>
标签的下一个兄弟节点,而我们需要的是下一个<font>
标签,所以我们可以使用nextSibling
属性两次来跳过<br>
标签和空的<td>
标签,然后获取到<font>
标签。
然后,我们可以使用innerText
属性获取<font>
标签中的文本内容,并使用includes
方法检查是否包含字符串"免费资源"。
即实现了只点开“免费资源”的链接并采集内容的需求。
Click Pages
above to see more pages