コンテキスト:バックエンドを備えたAndroidのニュースアグリゲーター。 Java Webクロールライブラリ(crawler4j)

導入部(すべての記事へのリンク付き)



ニュース収集システムの不可欠な部分は、サイト(クローラー、クローラー、「クモ」)をクロールするロボットです。 その機能には、これらのサイトでの変更の追跡や、システムのデータベース(DB)への新しいデータの入力が含まれます。



完全に既製の適切なソリューションはありませんでした。これに関連して、既存のプロジェクトから次の基準を満たすものを選択する必要がありました。





選択されたソリューションは、サイトをクロールするためのかなり人気のあるロボットcrawler4jでした 。 もちろん、受信したコンテンツを分析するために多くのライブラリを引き出しますが、これはその作業の速度や消費されるリソースには影響しません。 Berkley DBをリンクデータベースとして使用し、分析された各サイトのカスタムディレクトリに作成されます。



カスタマイズの方法として、開発者は行動パターン「 戦略 」(分析するサイトのリンクおよびセクションをクライアントが受け入れるべきかを決定する権利)と「 オブザーバー 」(サイトをクロールするとき、ページ情報(アドレス、形式、コンテンツ、メタデータ) )クライアントに転送されます。クライアントは、クライアントへの対処方法を自分で自由に決定できます)。



実際、開発者にとって、「スパイダー」はプロジェクトに接続し、動作をカスタマイズするためのインターフェースの必要な実装が転送されるライブラリのように見えます。 開発者は、ライブラリクラス«edu.uci.ics.crawler4j.crawler.WebCrawler»



(メソッド«shouldVisit»



および«visit»



)を展開し、その後ライブラリに転送します。 作業プロセスにおける相互作用は次のようになります。



画像



edu.uci.ics.crawler4j.crawler.CrawlController



は、対話の実行に使用されるライブラリのメインクラスです(セットアップのバイパス、制御コードの転送、ステータス情報の取得、開始/停止)。



以前はサイト解析の実装に対処する必要はありませんでした。したがって、すぐに一連の問題に直面する必要があり、それらを排除する過程で、実装と取得したクロールデータの処理方法についていくつかの決定を行う必要がありました。





ライブラリコードの変更



私にとっての主な問題は、サイトのページが変わらないというcralwer4j開発者のアーキテクチャ上のソリューションでした。 彼の作品の論理は次のとおりです。



画像



ライブラリのソースコードを検討した結果、この設定はどの設定でも変更できず、メインプロジェクトの分岐を作成することになりました。 示されたブランチで、「抽出されたリンクをリンクデータベースに追加する」アクションの前に、リンクデータベースへのリンクを作成する必要があるかどうかの追加チェックが行われます。最新ニュースへのリンクを提供します。



ただし、このような改良には、ライブラリを使用した作業の変更が必要であり、主なメソッドの起動は定期的に実行する必要があり、 クォーツライブラリを使用して簡単に実装できました。 開始ページに新しいニュースがない場合、メソッドは数秒で作業を完了しました(開始ページを受信し、それらを分析し、既に渡されたリンクを受信した後)、またはデータベースに最新のニュースを書き込みます。



ご清聴ありがとうございました!



All Articles