2

RSS フィードを生成するために、定期的に更新される (以前の記事とまったく同じ構造の新しい記事を追加する) ページをスクレイピングしたいと考えています。

ページを簡単に分析するコードを書くことはできますが、ping をエミュレートするにはどうすればよいですか。それはcronジョブでなければなりませんか?

(おそらく私が知っている重複した質問ですが、運が悪かったので直接的な答えを探しました。私が得た最も近いものはScrape and generate RSS feedで、これにはスクレイピングスクリプトがありますが、ページの変更に自動的に応答する方法に関する情報はありません)

4

3 に答える 3

3

システムによっては、ページが最後にいつ更新されたかを簡単に判断できる場合とそうでない場合があります。

変更を確認するにLast-Modifiedは、ページのヘッダーの HTTP ヘッダーを確認します。すべてのシステムがヘッダーを適切に更新するわけではないため、役に立たない場合があります。特にリクエストでヘッダーを指定し304た場合、変更されていないページが (未変更)のステータスを返す可能性もあります。If-Modified-Since

私は間違いなくcronジョブでこのようなものを実行します. ヘッダーだけから行うことは可能かもしれませんが、ページを更新する必要がある場合、ユーザーはサーバーが終了し、ページを取得し、処理を行い、送信するまで (相対的に) 長時間待機します。応答。非cronベースのアプローチで時々タイムアウトに遭遇しなかったとしたら、私は驚かれることでしょう。

于 2010-02-12T13:19:09.447 に答える
2

サイトが更新されたかどうかを確認する crontab を実行することができます (利用可能な場合は、最後に変更されたヘッダーを確認するか、関心のあるコンテンツを確認することによって)。

crontab がサイトをチェックしてコンテンツの変更を検出した場合、メッセージをキューに追加できます (たとえば、Zend_Queue http://framework.zend.com/manual/en/zend.queue.example.htmlのようなもの)。の場合、時間/データ制限に達するまで、またはキューが空になるまで、メッセージを処理するワーカーを持つことができます。

于 2010-02-12T13:12:04.330 に答える
1

Last-Modified行がない場合は、HEADリクエストへの応答で、ETag行とContent-Length行の存在と値を確認することもできます。これらのいずれも以前の値(保存した値)と一致しない場合は、コンテンツが変更されている可能性があります。これらに、変更を示す他の応答ヘッダー行を追加できます。

于 2010-02-12T13:37:07.723 に答える