我希望提取特定的两个兄弟节点(这两个兄弟节点是根据内容匹配的)之间的所有节点的内容。如图就是两个H2节点之间的所有p节点的内容到一个抓取内容中。怎么写xpath语句呀

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
举报 使用道具
| 回复

共 9 个关于本帖的回复 最后回复于 2017-3-7 10:19

沙发
quyixuan 金牌会员 发表于 2017-3-6 14:35:57 | 只看该作者
本帖最后由 quyixuan 于 2017-3-6 14:39 编辑

给你个思路,你要抓取的两个H2节点之间所有p节点,这两个H2节点的class值不同,可以这样:
class=sec0001后面的兄弟p节点 & class=sec0002前面的兄弟p节点
具体的xpath函数可以看下面这篇文章
http://www.gooseeker.com/doc/thread-1852-1-1.html
举报 使用道具
板凳
fqzlala 中级会员 发表于 2017-3-6 14:55:28 | 只看该作者
取出父节点所以信息,相当于所有H2和后面P的信息,第一个H2和第二个H2你能取到,然后取第一个H2之后的,第二个H2之前的。
用substring-before和substring-after函数。
比如去父节点内容//*[@class='xxxxx'],第一个H2内容://*[@class='xxxxx']/h2[@class='hec001'],第二个H2内容://*[@class='xxxxx']/h2[@class='hec002']。
那么取第一个H2之后的内容,substring-after(//*[@class='xxxxx'],//*[@class='xxxxx']/h2[@class='hec001'])这个是一个字符串,包含第一个H2之后的内容(包括第二个H2)。
利用上面的字符串结果,再取第二个H2之前的内容substring-before(substring-after(//*[@class='xxxxx'],//*[@class='xxxxx']/h2[@class='hec001']),//*[@class='xxxxx']/h2[@class='hec002']),这个应该就是最后结果的XPath。
举报 使用道具
地板
qq278053122 新手上路 发表于 2017-3-6 20:01:06 | 只看该作者
fqzlala 发表于 2017-3-6 14:55
取出父节点所以信息,相当于所有H2和后面P的信息,第一个H2和第二个H2你能取到,然后取第一个H2之后的,第 ...

我才发现这两个可能不是兄弟节点。。我想截取introduction 和experimemt之间的内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
举报 使用道具
5#
shenzhenwan10 金牌会员 发表于 2017-3-6 20:05:23 | 只看该作者
整页内容采集下来, 对采集的结果进行处理不是更方便?
举报 使用道具
6#
qq278053122 新手上路 发表于 2017-3-6 20:32:57 | 只看该作者
shenzhenwan10 发表于 2017-3-6 20:05
整页内容采集下来, 对采集的结果进行处理不是更方便?

尝试过太麻烦了

举报 使用道具
7#
qq278053122 新手上路 发表于 2017-3-6 20:36:24 | 只看该作者
fqzlala 发表于 2017-3-6 14:55
取出父节点所以信息,相当于所有H2和后面P的信息,第一个H2和第二个H2你能取到,然后取第一个H2之后的,第 ...

substring-before(substring-after(//*[@class='centerContent'],'1. Introduction'),'2. Experimental')  我用这条语句成功提取了想要的东西  但是现在有一个问题  提取到了除了我想要的东西之外,还有一些网站的图片编码之类的也提取进去了,有没有一种语句能够提取1. Introduction 和2. Experimental之间class名为svArtical和svArtical section clear的文本不属于这两个类名的文本就不提取。。。谢谢谢谢谢  感激不尽

举报 使用道具
8#
qq278053122 新手上路 发表于 2017-3-6 20:36:44 | 只看该作者
quyixuan 发表于 2017-3-6 14:35
给你个思路,你要抓取的两个H2节点之间所有p节点,这两个H2节点的class值不同,可以这样:
class=sec0001后 ...

substring-before(substring-after(//*[@class='centerContent'],'1. Introduction'),'2. Experimental')  我用这条语句成功提取了想要的东西  但是现在有一个问题  提取到了除了我想要的东西之外,还有一些网站的图片编码之类的也提取进去了,有没有一种语句能够提取1. Introduction 和2. Experimental之间class名为svArtical和svArtical section clear的文本不属于这两个类名的文本就不提取。。。谢谢谢谢谢  感激不尽
举报 使用道具
9#
fqzlala 中级会员 发表于 2017-3-7 07:57:07 | 只看该作者
qq278053122 发表于 2017-3-6 20:36
substring-before(substring-after(//*[@class='centerContent'],'1. Introduction'),'2. Experimental') ...

高级设置里,自定义xpath,选择文本内容

举报 使用道具
10#
fqzlala 中级会员 发表于 2017-3-7 10:19:04 | 只看该作者
qq278053122 发表于 2017-3-6 20:01
我才发现这两个可能不是兄弟节点。。我想截取introduction 和experimemt之间的内容

...

如果introduction和experiment是固定字符,就取introduction之后,experiment之前的文本内容

举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

  • 话题分析(NMF模型和LDA模型)软件的安装和
  • 运行Apple无法验证的程序的方法
  • 文本聚类分析软件的安装和使用方法
  • 利用AI阅读和分析文本:扣子COZE记录用户反
  • 在网页片段内直观标注——以B站评论采集为

热门用户

GMT+8, 2025-2-24 04:06