2012-02-25 9 views
2

私はさまざまなWebサイトからデータを取得しようとしています。スタックオーバーフローでデータを取得すると、多くの人がこれを示唆しているようにcrawler4jを使用しています。以下は、私の理解/デザインです:データを取得するためのクローラ4Jの効率的な設計

1. Get sitemap.xml from robots.txt. 
2. If sitemap.xml is not available in robots.txt, look for sitemap.xml directly. 
3. Now, get the list of all URL's from sitemap.xml 
4. Now, fetch the content for all above URL's 
5. If sitemap.xml is also not available, then scan entire website. 

、あなたは私に知らせてくださいしてくださいすることができ、ステップ1を行うことができるcrawler4J、2と3があります? より良いデザインが利用可能であることを提案してください(利用可能なフィードがないと仮定して) もしそうなら、私にどのようにしたらいいか教えてください。私はcrawler4jを使用しないので、塩の粒で私の意見を取ることがない

おかげ ヴェンカト

+0

こんにちは、入力してください。 – topblog

+0

どんな助力も大歓迎です... – topblog

答えて

1

: 私はそれがクローラによって行うことができると思いますが、あなたには、いくつかのコードを変更する必要があるように見えます。具体的には、RobotstxtParser.java and HostDirectives.javaをご覧ください。パーサーを変更してサイトマップを抽出し、ディレクティブに新しいフィールドを作成してsitemap.xmlを返す必要があります。 sitemap.txtから指示が返されなかった場合は、フェッチャーでステップ3を実行できます。

しかし、正確にはsitemap.txtを確認することで得られるものはわかりません。具体的なものを探しているのでなければ、役に立たないようです。

+0

Thx Lirik。私はいくつかのウェブサイトが(robots.txtに記載されている)sitempap.xmlにあるすべての製品URLのリストを提供すると聞いています。ウェブサイト全体をクロールするのではなく、sitemap.xmlを使う良い選択肢ですが。また、クロール全体がいくつかの不必要なリンク(faqなど)を与えている可能性もあります。 – topblog

+0

実際、私の必要条件は、書籍、携帯電話、ノートパソコンなどの異なるカテゴリのすべてのURLのリストをpricegrabberと同様に取得することです。 – topblog

2

クローラー4Jは手順1,2,3を実行できませんが、手順4と5では非常にうまく動作します。私の助言は、Http Components のようなJava HTTPクライアントを使用してサイトマップを取得することです。任意のJava XMLパーサーを使用してXMLを解析し、コレクションにURLを追加します。次に、クローラ4jの種をリストに入力します。

for(String url : sitemapsUrl){ 
controller.addSeed(url); 
} 
controller.start(YourCrawler, nbthreads); 
関連する問題