本帖最后由 ym 于 2016-4-15 15:40 编辑
常见问题 > 制作规则—常见问题导航 > 自定义xpath > xpath使用substring-before()和substring-after()遇到的问题
问:在script 的dom里面包含的内容,好像没有解析出来,刷新网页结构也看不到,我搜索 //script,里面是一个函数
答:你的意思是要抓取<script>标签里的内容?用//script[contains(.,'sampling=1000')] 能否定位到?
问:找到了,谢谢。能只抓取这个吗,这些内容都是在一个text()里面
答:自己自定义xpath过滤,用substring-before和substring-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