本帖最后由 ym 于 2016-4-15 15:40 编辑

常见问题 > 制作规则—常见问题导航 > 自定义xpath > xpath使用substring-before()和substring-after()遇到的问题

问:在script dom里面包含的内容,好像没有解析出来,刷新网页结构也看不到,我搜索 //script,里面是一个函数


答:
你的意思是要抓取<script>标签里的内容?//script[contains(.,'sampling=1000')] 能否定位到?

问:找到了,谢谢。能只抓取这个吗,这些内容都是在一个text()里面


答:自己自定义xpath过滤,用substring-beforesubstring-after,参考http://www.gooseeker.com/doc/forum.php?mod=viewthread&tid=548&highlight=xpath

问:按着那个做了还报错了,substring-after(following-sibling::html/head/script[position()=67]/text(),'categoryId:')         
我要抓取
html/head/script[position()=67]/text()节点的categoryId: 后面的数据,这么写哪里有错?

答:
html是最高节点,不会有following-sibling节点。
改为
substring-after(html/head/script[position()=67]/text(),'categoryId:')试试

问:没有报错,但是没有内容,数据规则生成的


答:scrpt后的text()不要行不行?

问:不放text()也不行


答:
应该含有text(),刚才我测了,你把categoryId后面的:去掉试试

问:也不行


答:html前缺少/,可能这是关键问题

问:
出来了,谢谢

那就还要再用一次substring-before函数,把后面那段去掉,substring-before(substring-after(/html/head/script[position()=49]/text(),'categoryId:'),','),搞定了

再问一个问题,那个script的位置跳来跳去的,在script[49]或者script[67],也有可能是其他,可以用//script[contains(.,'gt = 'getElementsByTagName'')]   代替/html/head/script[position()=49] 吗,我这么写的时候报错了
答:多了一层 ' 号,要查查xpath用什么转义,或者避开这个符号
问:去掉那个'也还是报错
答:选个更好的字符串吧
问:前面的那个XPath搜索出来的是正确的
答:是两套解释器,下面那个是xslt解释器

问:gt = 'getElementsByTagName'  这段内容是唯一的,应该和选取无关
这个text()里面的前面一部分是这个


我想到办法解决了,直接定位到最上面一层,substring-before(substring-after(/html/head,'categoryId:'),',')   这样子就搞定了





举报 使用道具
| 回复

共 1 个关于本帖的回复 最后回复于 2016-12-19 12:57

沙发
zhangpb 新手上路 发表于 2016-12-19 12:57:39 | 只看该作者
substring-before(substring-after(/html/BODY,'name'),'taxnum') 这个对不对?
举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

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

热门用户

GMT+8, 2024-4-25 18:39