:怎么自定义xpath才能只把经纬度提取出来?
xpath_custom_1.jpg

:这个帖子讨论了自定义xpath的使用方法:http://www.gooseeker.com/doc/thread-542-1-1.html


:这个位置该怎么写xpath?生成的抓取规则有如下片段

<经纬度>
<xsl:value-of select="following-sibling::div[position()=1]/script[position()=1]/text()"/>
</经纬度>


:参照这个帖子:http://www.gooseeker.com/doc/thread-542-1-1.html,为“经纬度”这个抓取内容做类似那个步骤,但是设置自定义xpath的时候,不要选“兼做定位”,那么 “定位标志表达式”处填入你自动生成的这个:following-sibling::div[position()=1]/script[position()=1]/text(),“抓取内容表达式”填写substring-before(substring-after(following-sibling::div[position()=1]/script[position()=1]/text(), '})'))。就会把  112.9435503,lat:28.16865872  抓出来。


如果想把经度和纬度分开存,那么就建两个抓取内容。


:报错了

xpath_custom_2.png

是不是这里不对?

xpath_custom_3.png


:不好意思,写错了,应该是substring-before(substring-after(following-sibling::div[position()=1]/script[position()=1]/text(), '({lng:'), '})')


:测试成功了,还有一个问题,这一个线索可以了,那下一个做定位的时候会不会有问题


:div[position()=1]/script[position()=1]  这两个position()最容易出问题,万一下一个网页的位置不在1,而是2,就不行了,那么也可以写成有适应力的


:怎么写成有适应力的?


:following-sibling::div/script/text()[contains(., '({lng:')],拷贝到定位标志表达式中。这个就是假定凡是有经纬度的信息,里面都有  ({lng:  这样的标志,这样通用性就好很多了

你做这个规则,还有好几个地方通用性都不强,没有用定位标志映射,虽然是可选的,但是可以提高通用性

:这个。。。怎么提高通用性

://*[@id='body']/div[position()=2]/div[position()=3]  这种好几层含有position(),万一div多一个,少一个都受影响
选中 含有@class='shop-name'的H1,用定位标志映射给 名称
选中那个含有@class='aside'的DIV,用定位标志映射给  经纬度


:都是大众点评网上的同级网页,网页结构应该是一样的吧

:有时候网页上会插入广告之类的,会有变化。
生成的规则中的xpath就会变短,就会提高通用性,但是也要相应地修改自定义xpath那个抓经纬度的式子。
可以先去掉“高级设置”,生成了抓取规则以后,再根据生成的xpath,编写自定义的xpath

:经纬度这个没法做定位映射,没有id或者class。要看他上一级吗?

:用它上级。往上找,找个最近的。如果没有合适的就不用,不能离着太远

后续讨论:http://www.gooseeker.com/doc/thread-549-1-1.html
举报 使用道具
| 回复

共 0 个关于本帖的回复 最后回复于 2015-10-1 22:59

您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

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

热门用户

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