我正在做一个需要从网站收集一些数据的项目,所以我正在使用 webharvest。
我遇到了一个问题,我正在收集的数据(来自新闻网站的评论)有时会超过一页。我正在尝试将其配置为在网页的 xpath 中查找第二页评论的链接。问题是,如果我尝试if
测试,条件总是通过,如果我尝试try
语句,try
主体总是成功。这导致我的脚本从第一页(如果只有一个)中提取评论两次。然而,带有两组评论的文章效果很好。所以我的问题与if
条件和try
语句的语法有关。Webharvest 上关于这些功能的文档很少。
这就是我正在尝试的。一、if
测试:
<var-def name="secondPageLink">
<xpath expression="/a[@class='next']/@href">
<var name="firstPage"/>
</xpath>
</var-def>
<case>
<if condition="${secondPageLink != null}">
[ process second page ]
</if>
</case>
二、try
/ catch
:
<try>
<body>
<var-def name="secondPageLink">
<xpath expression="/a[@class='next']/@href">
<var name="firstPage"/>
</xpath>
</var-def>
[ continue to process page ]
</body>
<catch>
</catch>
</try>
测试的问题if
在于,尽管当不存在第二页时变量为空(我可以从 gui 中的调试中看到),但if
似乎返回 true,并运行它的主体。
我可以更容易地看到为什么try
/catch
不能正常工作,因为 xpath 不返回任何值(如果第二页不存在)不会构成“错误”,因此尝试仍然会成功。另一个困难是下一页链接的@href 是相对的,因此需要附加到第一页的URL(或文章的基本URL,实际上,但这里相同),这意味着我的html -to-xml 采用 url ${firstPage}${secondPageLink},它最终只是再次成为第一页 URL,因此 webharvest 第二次处理第一页。
如果有人可以重新制定我的if
测试以在 secondPageLink xpath 返回空值时返回 false,我将非常感激!