在使用Automa插件爬取数据的时候经常会遇到锚点选择困难的情况
通常我们使用Automa自带的瞄准镜来选取定位采集数据的锚点,但是经常会遇到选择不准的情况,特别是在循环采集的时候,调试比较麻烦。下面介绍一个选择锚点的方法,就是根据属性值,直接定位锚点。
1、以百度大数据为例,在需要采集的“热度”数值上点右键,选“检查”菜单项,定位到“热度”这个文本对应的代码,可以看到 124570热度 ,那么 class=“text_1bZ-b” 就是这个字段的类名称,就可以用这个属性的名称来定位。
2、在CSS选择器中写上 [class=‘text_1bZ-b’]即可,顺便把【多选】和【等待选择器】选上,采到的数据放入表格中,实测这里不需要再使用{{loopData@loopid}}来循环了,数据一样能采集到。
3、流程图是这样的,在采集第一个文本时,是用了 {{loopData@bvUOjB}}.c-color 来循环采集的,第二个文本如第2点所述,没有使用循环参数了。.4、同理,对于各个锚点的定位,可以采用各种属性来定,例如使用id来定位,就在CSS选择器里面输入#kw,这里kw就是这个点位的id,各种属性可看下图参考。
5、一种方法始终不能包打天下
在采集学科分类时又发现了问题,[本科][理科][心理学类] 这三个字段的id居然是相同的,都是[class=‘tag_2vGZg’],这样的话采集又遇到了问题。用瞄准镜观察,三个字段对应的三个锚点分别是:
div:nth-child(1) > a li:nth-child(1)
div:nth-child(1) > a li:nth-child(2)
div:nth-child(1) > a li:nth-child(3)
这里使用 a li:nth-child(3) 作为CSS选择器的填入内容,并且顺便选上【多选】【等待选择器】,不需要写循环参数,实测采集正常。
6、Xpath来定位也是一个不错的选择
需要熟悉Xpath的定位知识,采集的数据比较进准清爽。
Xpath的教程
遇到有些格式不规范的表格,数据采集时需要用到多重条件的定位,相当于是要用两种条件来定位,那么下面这两个方法很好用,更多用法详见下面链接。
//title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 |
---|---|
//title[@lang=‘eng’] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 |
实操例子1: | |
//div[@class=“third-list-item-title”] | 选取div元素,且这些元素拥有值为third-list-item-title的class属性。 |
实操例子2: | |
//div[@class=“third-list-item-title”][@data-spm-anchor-id=“5176.21040285.J_9110863210.i1.28406908yDP2lK”] | 选取div元素,且这些元素拥有值为third-list-item-title的class属性。并且拥有值为5176.21040285.J_9110863210.i1.28406908yDP2lK的data-spm-anchor-id属性 |
实操例子3: | |
//*[@id=“zjxxEsDiv”]/table/tbody/tr/td[last()-2]/span[@cname][@cparam][@title] | 选取div元素,且这些元素拥有值为zjxxEsDiv的id属性。后面span拥有值为cname、cparam、title属性,这里面的技巧是使用了 td[last()-2],由于表格设计的格式可能不规范,在爬取时从前往后找数据,第一个总是错位,会误采集,但从后往前采集却没有问题,这样就用这个方法,找倒数的第几个,问题就解决了。有了这个语法,遇到大多数的定位问题都不是问题了。 |
– | – |
以上实例实测可用,完美解决Automa中使用两种条件定位的需求。 |
好的办法有很多,这些方法也是在CSDN里面看来的,觉得好用,就整理了放在这里存着。