快捷导航
本帖最后由 ym 于 2016-4-15 15:40 编辑

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

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

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

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

答:自己自定义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:')试试

问:没有报错,但是没有内容,数据规则生成的
图片7.png

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

问:不放text()也不行
图片14.png

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

问:也不行
图片9.png

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

问:
出来了,谢谢
图片10.png
那就还要再用一次substring-before函数,把后面那段去掉,substring-before(substring-after(/html/head/script[position()=49]/text(),'categoryId:'),','),搞定了
图片11.png

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

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

我想到办法解决了,直接定位到最上面一层,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') 这个对不对?
举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

  • 在Jupyter Notebook中将分词结果转换成数组
  • 在Jupyter Notebook中使用word2vec和k-mean
  • 网络评价对水产品线上销量影响的实证分析—
  • “中坚青年”压力与动力转化的—以高校青年
  • “抖音”短视频文本里的新生代婆媳关系

热门用户

GMT+8, 2021-11-30 16:18