定位标志使用巧妙的话,能够有样例复制的效果,把网页上相同定位的信息都采下来,其核心就是通过映射属性节点(具有id/class值)来实现精准定位。
技巧: 只做内容映射的话,一旦网页结构发生细微改变,都会导致规则失效,而最好的技巧就是把内容映射与定位标志映射结合使用,可以大大降低失效的风险,下面介绍结合两者使用并实现样例复制的操作方法。
教程规则:房天下采集全国租房电话二级 样本网页:http://zu.sz.fang.com/
一、 创建好规则的整理箱结构
这里不细讲制作规则的基本操作,请学习制作规则入门教程。
二、 对抓取内容既做内容映射又做定位标志映射
内容映射只能把元素节点(无下层节点)映射给抓取内容,如果要把DOM区块节点(有下层节点)做内容映射,就要在高级设置里勾选文本内容,所以,根据这两种情况,有以下两种操作顺序:
1、操作顺序:定位标志映射 -> 内容映射
(1)如果抓网页文本的话,只做定位标志映射就够了,但再做内容映射会使定位更加精准。
(2)点击网页的租房标题,定位到的A节点没有id/class值,显然无法作为定位标志节点,这种情况,往上层找到属性节点P,右击做定位标志映射。
(3)做完定位映射后,其定位编号依然为-1,高级设置会被自动设置为只抓文本内容,要做内容映射的话,只能选DOM区块节点(有下层节点)。这里可选P或A节点 ,选择A节点可以缩小范围,选 P节点则没有变化,选择#text的话请看后面第2种操作顺序。
注意:做了内容映射后的变化可通过数据规则/输出信息窗口进行观察。
2、操作顺序:内容映射 -> 定位标志映射
(1)本案例中,租房网址存在于@href节点,需要精确地映射这个节点,而不是像第1种操作顺序可以选择DOM区块节点,这种情况,就要先做内容映射,后做定位标志映射。
(2)找到租房网址对应的@href节点,右击选择内容映射->网址;然后往上层找到包容@href的属性节点P,右击选择定位标志映射->网址。
此时,点击测试,可以看到单条信息,后面还要对容器节点做定位标志映射才能实现样例复制,但也有一些结构特殊的网页,可能已经实现了样例复制的效果。
三、对容器节点做定位标志映射实现样例复制的效果
1、对容器节点做定位标志映射
找到框住一整块信息(橙框部分)的属性节点DL,右击做定位标志映射给样例。
注意:对于同时具有id值和class值的属性节点,映射后是优选id值作为定位标志。
2、修改定位标志类型
每一条租房信息对应的DL节点的id值是变化的,用id值做定位标志就只能得到一条租房信息,但是, class值却是相同的,所以,把定位类型修改为class,就能实现样例复制,操作:双击整理箱的样例,勾选class并保存,定位标志就变成class值。
3、对顶点做定位标志缩小采集范围
此时,点击测试已实现样例复制的效果,但为了缩小采集范围,对整理箱顶点也做定位标志映射,操作:往上找到包容这些兄弟节点的属性节点,做定位标志映射给顶点,修改定位标志类型。
注意:如果id/class值包含数字,建议选择不包含数字的定位标志值,因为数字通常是变化的。
四、如何用定位标志映射对样例复制进行优化
1、按照样例复制操作的话,爬虫路径是由软件自动生成的,不一定是最好的,如下图,起点路径中选择了@id='rentid_B04_02'做为起点标志,前面说过,包含数字的属性值是多变的,所以,这种爬虫路径的适应性较弱,容易采集失败。
2、所以,我们建三层结构的整理箱,对顶点做定位标志映射,就能改变起点路径,使规则增强适应性,如下图。可见,内容映射、定位标志映射和样例复制三者的巧妙结合,能够优化爬虫路径,解决很多网页采集不完整或缺漏的情况。
若有疑问可以或 |