无规则采集器列表算法(【循环列表】去采集多个列表或详情页的数据。)
优采云 发布时间: 2022-02-13 10:29无规则采集器列表算法(【循环列表】去采集多个列表或详情页的数据。)
我们通过创建一个【循环列表】去采集多个列表或者详情页的数据。初学者系列课程中详细介绍了如何创建[循环列表]。
一般情况下,上述方法创建的【循环列表】不会出错,可以准确采集所有我们想要的数据。但有时会出现一些问题:比如滚动后加载了100个列表,为什么只有采集到20个?有一些我们不需要的列表,如何排除它们?页面原本有30个列表,为什么只能采集到10个?
这时候需要手动修改XPath才能准确定位到列表。
下面是一个例子来说明。
实例网址:
Step1:按照正常操作创建流程
在这个页面,我们点击各个公司名称进入详情页面,进入采集详情页面的数据。首先,按照正常操作创建【循环列表】和【循环页面】。
Step2:手动执行规则
配置完成后,手动执行规则,发现:当页面在第一页时,10个公司名称全部正常定位,翻到第二页时,前10个公司名称都定位,后一个不是。定位到(以红色框表示被定位)。
这是因为[循环列表]定位XPath是错误的,需要手动修改。如何修改?见下文。
Step3:修改【循环列表】XPath
进入【循环列表】的设置页面,发现默认循环方式为【固定元素列表】,一共有10个定位XPath。
看到这里,大家肯定有疑惑,什么是【固定元素列表】?
[固定元素列表]是对应于数据列表的XPath。例如,在这个网页中,一个 XPath 对应于一个页面列表。所以第一页有10个list,都被定位到了,第二页有>10个list,但是只有前10个被定位。
在这种情况下,我们有两个修改:
① 手动增加 XPath
您可以添加与网页上的列表一样多的 XPath。
观察这些XPath的区别,发现它们很相似,只是第二个DIV标签后面的数字不同,所以后面增加数字来定位新的列表。
这种方法有一定的局限性。您必须知道网页最多有多少个列表。否则,添加的 XPath 条目数少于实际列表,仍然会出现漏挖现象。
② 写一个通用的 XPath(推荐!)
Generic XPath 将查找所有满足目标条件的列表,而不管每个页面上有多少列表。
或者观察这些XPath的区别,发现它们很相似,只是第二个DIV标签后面的数字不同,所以我猜可以去掉数字,得到一个通用的XPath。在火狐中验证一下,果然,页面上的所有列表都正常定位。
接下来进入【Loop List】设置页面,将循环方式改为【Unfixed element list】,输入修改后的XPath:
以上是将【固定元素列表】转换为【不固定元素列表】的示例。列表循环错误的根本原因是 XPath 无法正确定位。我们需要根据网页的情况进行修改。
最后总结一下:
1、当发现列表的定位不准确-缺失或采集到不需要的列表时,需要修改【循环列表】的定位XPath
如何修改需要一定的XPath知识,请看之前的XPath系统学习教程。
2、你需要选择合适的循环方式——【固定元素列表】或者【不固定元素列表】。
【固定元素列表】:有多个XPath,每个XPath对应一个列表项。如果其中一个 XPath 被删除,则无法找到网页中对应的列表项。适合明确网页上有多个数据列表,适合列表数量固定的网页,比如京东产品列表页面,每页固定60个产品。
【不固定元素列表】:通过一个通用的XPath定位所有列表项。由于 XPath 是通用的,所以无论网页中的列表数量是否变化都可以应用,非常好用。比如有的网站第一页有10页,第二页有8页,都可以定位到。
【固定元素列表】和【不固定元素列表】可以相互转换,请根据实际情况选择。