私はウェブサイトからデータを収集する必要があるプロジェクトに取り組んでいるので、webharvest を使用しています。
収集しているデータ (ニュース Web サイトからのコメント) が複数のページにまたがっている場合があるという問題が発生しています。Webページのxpathでコメントの2ページ目へのリンクを探すように構成しようとしています。問題は、ifテストを試みると条件が常にパスし、tryステートメントを試みるとtry本体が常に成功することです。これにより、スクリプトは最初のページ (1 つしかない場合) からコメントを 2 回抽出します。ただし、2 組のコメントを含む記事は美しく機能します。したがって、私の質問は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>
テストの問題は、if2 番目のページが存在しないときに変数が空であるにもかかわらず (GUI のデバッグから確認できます)、 がiftrue を返し、その本体を実行するように見えることです。
値を返さない xpath (2 番目のページが存在しない場合) は「エラー」を構成せず、try は引き続き成功するため、 try/が適切に機能しない理由をより簡単に確認できます。catchさらに難しいのは、次のページ リンクの @href が相対的であるため、最初のページの URL (または実際には記事のベース URL ですが、ここでも同じこと) に追加する必要があることです。 -to-xml は ${firstPage}${secondPageLink} という URL を取得しますが、これは単に最初のページの URL になるだけなので、webharvest は最初のページをもう一度処理します。
ifsecondPageLink xpath が空の値を返したときに false を返すように誰かが私のテストを再定式化できるなら、私は非常に感謝しています!