集搜客GooSeeker网络爬虫

标题: 提取多个节点,这些节点具有共同文本特征,怎么写xpath语句? [打印本页]

作者: sagehxq    时间: 2017-3-1 16:00
标题: 提取多个节点,这些节点具有共同文本特征,怎么写xpath语句?
现有一个网页pdf文档,其内容是“主要产品和服务项目:电子产品。经营状况:良好。"我需要把“主要产品和服务项目:”和“经营状况:”之间的文本内容提取出来。应该怎么写xpath语句。谢谢。

作者: xandy    时间: 2017-3-1 16:08
你要把主题名或者样本网址贴出来,然后截图说明下我们才知道网页结构是怎样的啊。
作者: xandy    时间: 2017-3-1 16:19
举个例子,假设你发的这段文本是某div节点(@class='xxx')下的text(),要把“主要产品和服务项目:”和“经营状况:”之间的文本内容提取出来,那么xpath可以这么写:
  1. substring-before(substring-after(//*[@class='xxx']/text(),'主要产品和服务项目:'),'经营状况:')
复制代码

前提是PDF的这段文本是可以抓取下来的,你可以参看这个帖子:《xpath使用substring-before()和substring-after()遇到的问题
作者: sagehxq    时间: 2017-3-1 16:49
这个pdf是可以抓取下来的,每一页是一个div节点。页下面的每一段话或者每一个词语也是一个子div节点。
样本网址:网页pdf

作者: sagehxq    时间: 2017-3-1 16:50
xandy 发表于 2017-3-1 16:19
举个例子,假设你发的这段文本是某div节点(@class='xxx')下的text(),要把“主要产品和服务项目:”和“ ...

这个pdf是可以抓取下来的,每一页是一个div节点。页下面的每一段话或者每一个词语也是一个子div节点。
样本网址:http://www.neeq.com.cn/disclosure/2016/2016-08-11/1470901305_691460.pdf



作者: xandy    时间: 2017-3-1 16:56
sagehxq 发表于 2017-3-1 16:50

你对照教程修改下xpath,上面的只是举例说明,不要直接复制进去用。

作者: Fuller    时间: 2017-3-1 22:22
pdf的div很特别,可能会把文本拆分到多个div中,自定义xpath不容易写,建议定义一个通用的规则,把整篇文挡的文本都采集下来,用另外的程序匹配其中的内容
作者: sagehxq    时间: 2017-3-1 23:46
Fuller 发表于 2017-3-1 22:22
pdf的div很特别,可能会把文本拆分到多个div中,自定义xpath不容易写,建议定义一个通用的规则,把整篇文挡 ...

但是,我需要提取的文本有个很显然的特征就是前后的文本内容固定,所以你看能不能利用这点。如果把所有文本抓下来,主要问题在于文本太多,有好几百页!

作者: Fuller    时间: 2017-3-2 09:05
sagehxq 发表于 2017-3-1 23:46
但是,我需要提取的文本有个很显然的特征就是前后的文本内容固定,所以你看能不能利用这点。如果把所有文 ...

组合使用substring-after()和substring-before()能把文本内容切出来,也可以作为判断条件进行定位

作者: sagehxq    时间: 2017-3-3 09:06
Fuller 发表于 2017-3-2 09:05
组合使用substring-after()和substring-before()能把文本内容切出来,也可以作为判断条件进行定位
...

望大神指教,我试了试,就是没搞明白



作者: sagehxq    时间: 2017-3-3 09:09
Fuller 发表于 2017-3-2 09:05
组合使用substring-after()和substring-before()能把文本内容切出来,也可以作为判断条件进行定位
...

而且,substring-after()和substring-before()只能针对某个节点下的文本,对吗?


作者: ym    时间: 2017-3-3 09:43
sagehxq 发表于 2017-3-3 09:09
而且,substring-after()和substring-before()只能针对某个节点下的文本,对吗?

...

是的,你可以用整篇文章的那个html节点作为提取信息的初始值。


作者: sagehxq    时间: 2017-3-3 09:55
ym 发表于 2017-3-3 09:43
是的,你可以用整篇文章的那个html节点作为提取信息的初始值。

能不能举个例子啊,这样讲得比较抽象,恕我愚钝。谢谢!
作者: xandy    时间: 2017-3-3 10:09
sagehxq 发表于 2017-3-3 09:55
能不能举个例子啊,这样讲得比较抽象,恕我愚钝。谢谢!

如下图所示,将整个HTML内容映射给要抓的内容。
[attach]5506[/attach]
然后,给该采集字段勾选高级设置->勾选自定义xpath->勾选文本内容,将xpath语句复制进抓取内容表达式:
  1. substring-before(substring-after(.,'主要产品与服务项目'),'普通股股票转让方式')
复制代码
就可以抓到如下结果了:
[attach]5507[/attach]


作者: sagehxq    时间: 2017-3-3 10:41
xandy 发表于 2017-3-3 10:09
如下图所示,将整个HTML内容映射给要抓的内容。

然后,给该采集字段勾选高级设置->勾选自定义xpath->勾选 ...

为什么我做出来的结果是这样呢?可能哪里出问题了?我是按照您的方法来的啊!

作者: sagehxq    时间: 2017-3-3 10:44
xandy 发表于 2017-3-3 10:09
如下图所示,将整个HTML内容映射给要抓的内容。

然后,给该采集字段勾选高级设置->勾选自定义xpath->勾选 ...

这个xpath在搜索栏里定位不到dom节点,不知道哪里有问题。好捉急!

作者: xandy    时间: 2017-3-3 10:49
sagehxq 发表于 2017-3-3 10:44
这个xpath在搜索栏里定位不到dom节点,不知道哪里有问题。好捉急!

高级设置里面xpath要复制进去。
这个xpath里头有函数,不能直接在搜索框进行搜索。

作者: sagehxq    时间: 2017-3-3 11:02
xandy 发表于 2017-3-3 10:49
高级设置里面xpath要复制进去。
这个xpath里头有函数,不能直接在搜索框进行搜索。
...

对啊,我是将substring-before(substring-after(.,'主要产品与服务项目'),'普通股股票转让方式')复制到了“抓取内容表达式”这个文本框里了的。但是一点击测试,输出信息就是没有您的结果啊!


作者: sagehxq    时间: 2017-3-3 11:03
xandy 发表于 2017-3-3 10:49
高级设置里面xpath要复制进去。
这个xpath里头有函数,不能直接在搜索框进行搜索。
...


对啊,我是将substring-before(substring-after(.,'主要产品与服务项目'),'普通股股票转让方式')复制到了“抓取内容表达式”这个文本框里了的。但是一点击测试,输出信息就是没有您的结果啊![attach]5512[/attach]

作者: xandy    时间: 2017-3-3 11:10
sagehxq 发表于 2017-3-3 11:03
对啊,我是将substring-before(substring-after(.,'主要产品与服务项目'),'普通股股票转让方式')复制到 ...

刷新网页结构,然后重新试试吧,多试几次!

作者: xandy    时间: 2017-3-3 11:11
sagehxq 发表于 2017-3-3 11:03
对啊,我是将substring-before(substring-after(.,'主要产品与服务项目'),'普通股股票转让方式')复制到 ...

还有就是你要确保你要提取的文字就是在'主要产品与服务项目'和'普通股股票转让方式'之间,如果换了要抓取的内容,xpath函数还得调整过。

作者: sagehxq    时间: 2017-3-3 11:14
xandy 发表于 2017-3-3 11:11
还有就是你要确保你要提取的文字就是在'主要产品与服务项目'和'普通股股票转让方式'之间,如果换了要抓取 ...

每个pdf都具有这样的特征,而且我用的pdf样本都是和你的样本一样,到底哪里出了问题了呢?


作者: xandy    时间: 2017-3-3 11:18
sagehxq 发表于 2017-3-3 11:14
每个pdf都具有这样的特征,而且我用的pdf样本都是和你的样本一样,到底哪里出了问题了呢?

...

你先报存规则,保存完后发下规则名,我看下。
不然自己新建过规则试下!!!

作者: sagehxq    时间: 2017-3-3 11:23
xandy 发表于 2017-3-3 11:18
你先报存规则,保存完后发下规则名,我看下。
不然自己新建过规则试下!!!
...

主题名:pdf抓取sage。

作者: xandy    时间: 2017-3-3 11:38
sagehxq 发表于 2017-3-3 11:23
主题名:pdf抓取sage。

点击“规则”,“刷新网页结构”,然后点击测试后结果就有了。
[attach]5514[/attach]
ps:下次可不可以先按提示先操作下再发问。

作者: sagehxq    时间: 2017-3-3 11:43
xandy 发表于 2017-3-3 11:38
点击“规则”,“刷新网页结构”,然后点击测试后结果就有了。

ps:下次可不可以先按提示先操作下再发问 ...

我有刷新网页结构的,您是用的我创建的规则吗?

作者: xandy    时间: 2017-3-3 11:46
sagehxq 发表于 2017-3-3 11:43
我有刷新网页结构的,您是用的我创建的规则吗?

你看下截图的主题名,是你的

作者: xandy    时间: 2017-3-3 12:03
sagehxq 发表于 2017-3-3 11:43
我有刷新网页结构的,您是用的我创建的规则吗?

在MS谋数台的浏览器中,先把滚动条拉到底(让MS把所有内容先解析出来)
[attach]5517[/attach]
然后:
1)点击“规则”
2)点击“刷新网页结构”
3)点击测试

作者: sagehxq    时间: 2017-3-3 12:41
xandy 发表于 2017-3-3 12:03
在MS谋数台的浏览器中,先把滚动条拉到底(让MS把所有内容先解析出来)

然后:

谢谢,原来问题出在没有加载完全!!!





欢迎光临 集搜客GooSeeker网络爬虫 (https://www.gooseeker.com/doc/) Powered by Discuz! X3.2