我自定义xpath,用了substring-before(),勾上专用定位并填上定位表达式,重新加载规则就会报错,不勾专用定位和内容定位,保存后加载规则都不会报错,这是什么情况?


规则名是“百度网页关键词搜索_fuller”,可以测试一下。


自定义xpath专用定位.png

举报 使用道具
| 回复

共 1 个关于本帖的回复 最后回复于 2016-5-21 15:32

Fuller 管理员 发表于 2016-5-21 15:32:03 | 显示全部楼层
经检查,是定位标志表达式中填写的xpath语法没有问题,但是实际上定位不到网页内容,所以失败了。

这是一个使用技巧:
在一个网页列表中,排在第一个的样例信息不全,有些字段缺失,比如上例,没有“日期”,但是为了做样例复制,不得不用它。此时就能发挥自定义xpath的优势,而且定位标志表达式和抓取内容表达式可以是两个不同的表达式。
1,定位标志表达式:
只在加载抓取规则的时候使用。注意:GooSeeker网络爬虫在整理箱中定义抓取规则,要求每个抓取内容在网页上都映射到某个DOM节点,加载以前的规则的时候,先要把映射关系恢复出来。但是,像这种情况,第一个样例其实是不包含符合条件的节点的,所以,专门用一个定位标志表达式指向一个在网页上总是有的节点,当加载规则的时候,能确保加载成功。本例,完全可以指向代表整个第一个样例的DIV节点。

2,抓取内容表达式:
加载规则的时候不用,而是DS打数机抓取数据的时候采用,这个规则才真正把内容抓下来,加载到MS谋数台上的时候,根本不看这个规则。

题主问的问题,其实是MS谋数台加载规则的时候根据这个定位表达式根本找不到这个DOM节点。


下面讲讲“专用定位”,“兼做定位”的用法。
其实有三种组合
1,哪个都不选:就用MS谋数台的自动定位
2,选择专用定位:MS谋数台加载规则的时候,根据 定位标志表达式 中的xpath恢复映射关系
3,选择兼做定位:MS谋数台加载规则的时候,把 抓取内容表达式 当成定位表达式使用。

例如,substring-before(.//span[contains(@class,'newTimeFactor')]/text(),'-') 是不能选“兼做定位”的,因为这个xpath的结果是一个字符串,不是DOM节点。


举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

  • Gephi社会网络分析-马蜂窝游记文本分词并同
  • Gephi社会网络分析-基于马蜂窝游记文本以词
  • 知乎话题文本根据词语间距筛选后生成共词矩
  • 马蜂窝游记文本分词后以词语间距为筛选条件
  • 学习使用apriori算法挖掘关联关系

热门用户

GMT+8, 2024-4-19 07:09