XPATH 定位正确  但采集内容为空

//*[@class='buyer-nick ng-binding']/text()[position()=2]     内容正确     
自定义XPATH写成  .//*[@class='buyer-nick ng-binding']/text()[position()=2]  采集内容直接为空  多一个点   就变成空白内容
举报 使用道具
| 回复

共 3 个关于本帖的回复 最后回复于 2020-7-20 11:35

沙发
Fuller 管理员 发表于 2020-7-18 17:36:49 | 只看该作者
.// 表示以整个整理箱定位到网页区域为参照,在网页区域内找任意层次,找到class为'buyer-nick ng-binding'的节点,估计你的规则的整理箱定位到的节点跟这个xpath的相对关系不对。

先不自定义xpath,而是让爬虫生成xpath,点击“测试”按钮,在弹框中看到抓取的内容,点击弹框的“数据规则”页签,看到自动生成的规则,找到这个抓取内容的xpath,参照这个xpath写自定义的。

你的规则名字是什么?
举报 使用道具
板凳
ykmbllw 初级会员 发表于 2020-7-20 10:30:27 | 只看该作者
Fuller 发表于 2020-7-18 17:36
.// 表示以整个整理箱定位到网页区域为参照,在网页区域内找任意层次,找到class为'buyer-nick ng-binding' ...

因为需要账号的原因 无法提供  采集页面  

<xsl:template match="//*[@class='buyer-nick ng-binding']/text()[position()=2 and count(./.)>0]" mode="采集">

使用数据规则里面   XPAHT   不加.   和   //*[@class='buyer-nick ng-binding']/text()[position()=2]    定位内容相同  
但加点  后    同样采集内容为空!
举报 使用道具
地板
Fuller 管理员 发表于 2020-7-20 11:35:45 | 只看该作者
match的xpath是用来在html上划定一个区域的,从这个区域中采集抓取内容。

所以,match的xpath通常不要手工修改,因为要修改的话至少要修改两处。

要自定义xpath的是抓取内容的xpath,match划定了一个区域,那么抓取内容就是在这个区域中定位DOM节点,所以,抓取内容的xpath要相对于match的xpath。

match都已经定位到了postion=2的text,如果抓取内容就是要这个text,那么只需要写成  . 就可以了
如果想要这个text下面的第一个div类型的兄弟节点,就写成 preceding-sibling::div[1]或者 ./preceding-sibling::div[1]
如果想要这个text下面的第一个div下面的第一个text,就写成 preceding-sibling::div[1]/text()[position()=1]
依次类推
举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

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

热门用户

GMT+8, 2024-4-20 03:26