避免不合适的定位标志影响抓取规则

2016-1-27 15:12| 发布者: Fuller| 查看: 11974| 评论: 2

摘要: 大家经常会问:看起来一个很普通的表格,要抓取每一行的每个单元格,但是发现有些单元格的内容是重复的。这是一个常见问题,原因是每个单元格的显示样式是一样的,编写网页html的工程师使用了相同的class或者id,而G ...

大家经常会问:看起来一个很普通的表格,要抓取每一行的每个单元格,但是发现有些单元格的内容是重复的。

这是一个常见问题,原因是每个单元格的显示样式是一样的,编写网页html的工程师使用了相同的class或者id,而GooSeeker网络爬虫会自动选用网页上的class或者id作为定位标志,一旦出现相同的class或者id,抓取内容有可能就会重复。

下面我们用一个具体例子讲解怎样避免这个问题,以及提高抓取规则适应性的小技巧。

1. 样本网页和抓取规则名

  • 样本网页是:广州红盾信息网,http://59.41.9.91:8080/was5/web/search?channelid=221893&searchword=%E4%B8%8A%E5%B8%82%E5%85%AC%E5%8F%B8&perpage=&token=&templet=
  • 抓取目的是:把每个企业的注册状态抓取下来
  • 关键功能点:需要GooSeeker网络爬虫自动输入查询日期
  • 抓取规则名:企业信息公告_输入查询条件 ,下载地址:http://www.gooseeker.com/res/detail_111248.html
  • 抓取规则名:企业信息公告_抓取查询结果 ,下载地址:http://www.gooseeker.com/res/detail_111249.html

很明显,需要两级规则,第一级用于输入查询条件,第二级是把看到的查询结果抓下来。运行时要从第一级开始。编辑第二级抓取规则时,要把规则的加载过程分成两阶段执行:阶段1,把抓取规则下载到工作台上来,但是不立即分析;阶段2,让用户输入查询条件,看到抓取结果后再手工启动“后续分析”过程。这是因为第二级规则的页面是查询关键词后,网页结构发生了变化,必须定位到搜索关键词后的页面才能正确加载规则。

2. 设置定位首选项,弃用定位标志

如上图,在红圈位置点击鼠标右键,选择菜单“首选项”,在弹出窗口中选择“绝对定位”。重新映射后,红色箭头指向的那些相同的@class值就不会干扰抓取了。从5.6.0版本爬虫开始,定位菜单挪到整理箱右边。

请注意,@class值是重要的定位标志,有些是对抓取很有效的,要排除的情形是横向单元格之间有相同的@class,如果横向单元格之间没有重复的@class,而重复出现在行之间,那是最好的,抓取多行的时候不但可以选择样例复制,也可以使用定位标志映射,定位标志映射更有适应性。

其实,为了抓取这个网页,必须选择绝对定位,否则只能抓取第一行,即使做了样例复制映射也不行,请看红色箭头指向那两行的 @id 值,每行都有唯一的@id 值,如果自动生成的抓取规则使用了这个@id值,那么无论怎么调整规则,都只能抓到一行。可见,在行的方向上,相同的@class是我们期望的,唯一性的@id是我们要避开的。这一点,刚好与列方向不一样。

选择绝对定位会大大降低抓取规则的适应度,那么,怎样做弥补呢?

3. 用嵌套整理箱兼顾定位标志映射和样例复制映射

如上图,我们定义了一个多层嵌套的整理箱,“企业信息”和“样例复制”都是容器节点,他们下面才是抓取内容。“企业信息”这一级只是起到一个定位作用,把一个@id映射给它,这个@id特别好,唯一性地限定了整个表格范围。这样,即便我们设置了绝对定位,但是因为顶级容器节点含有一个定位标志,那么生成的抓取规则也是基于这个标志节点的,弥补了绝对定位导致适应性降低的缺陷。

因为对一个容器节点不能同时做样例复制映射和定位标志映射,所以,又创建了一级容器节点“样例复制”,专门用来做样例复制映射,抓取多行。

上图,蓝色箭头指向的那些定位标志都有效地避开了。

4. 爬虫群入库功能带来的惊喜

我们人为地增加了一级容器节点,这个节点是没有意义的,请使用爬虫群的入库过程,从云存储数据库中导出excel的时候,就会惊喜地发现这些多余的容器节点被过滤掉了。

5. V5.6.x版本的缺陷

由于输入的查询条件是写在第一级抓取规则中的,所以,要添加查询条件,必须要修改抓取规则,当查询条件很多,可以使用连发弹仓功能(v6.0.1版本爬虫),支持10000个关键词自动搜索采集。

7

鲜花
1

握手

雷人

路过

鸡蛋

刚表态过的朋友 (8 人)

相关阅读

发表评论

最新评论

评论 ym 2017-1-19 18:03
beimian1573: 网页失效了
已经更新了
评论 beimian1573 2017-1-19 16:28
网页失效了

查看全部评论(2)

GMT+8, 2024-12-13 13:04