0

私は単純化された Web サイト ダウンローダー (プログラミング割り当て) に取り組んでおり、指定された URL のリンクを再帰的に調べて、個々のページをローカル ディレクトリにダウンロードする必要があります。

単一のページからすべてのハイパーリンク (href 属性) を取得する関数が既にありますSet<String> retrieveLinksOnPage(URL url)。この関数は、ハイパーリンクのベクトルを返します。レベル 4 までのページをダウンロードするように言われました (レベル 0 はホームページです) したがって、基本的にはサイト内のすべてのリンクを取得したいのですが、再帰アルゴリズムを考え出すのに苦労しています。最後に、次のように関数を呼び出すつもりです。

retrieveAllLinksFromSite("http://www.example.com/ldsjf.html",0)

Set<String> Links=new Set<String>();
Set<String> retrieveAllLinksFromSite (URL url, int Level,Set<String> Links)
{
    if(Level==4)
       return;
    else{

        //retrieveLinksOnPage(url,0);
        //I'm pretty Lost Actually!
        }

}

ありがとう!

4

2 に答える 2

2

擬似コードは次のとおりです。

Set<String> retrieveAllLinksFromSite(int Level, Set<String> Links) {
    if (Level < 5) {
        Set<String> local_links =  new HashSet<String>();
        for (String link : Links) {
            // do download link
            Set<String> new_links = ;// do parsing the downloaded html of link;
            local_links.addAll(retrieveAllLinksFromSite(Level+1, new_links));
        }
        return local_links;
    } else {
        return Links;
    }

}

コメントで自分で実装する必要があります。特定の 1 つのリンクから関数を実行するには、最初のリンクを 1 つだけ含むリンクの初期セットを作成する必要があります。ただし、複数の初期リンクがある場合にも機能します。

Set<String> initial_link_set = new HashSet();
initial_link_set.add("http://abc.com/");
Set<String> final_link_set = retrieveAllLinksFromSite(1, initial_link_set);
于 2012-09-26T03:04:17.217 に答える
0

HashMapa の代わりに aを使用してVector、リンクとそのレベルを保存できます (すべてのリンクをレベル 4 まで再帰的に取得する必要があるため)

また、次のようなものになります(全体的なヒントを与えるだけです):

HashMap Links=new HashMap();

void retrieveAllLinksFromSite (URL url, int Level)
{
    if(Level==4)
       return;
    else{
        retrieve the links on current page and for each retrieved link,
        do {
           download the link
           Links.put(the retrieved url,Level)  // store the link with level in hashmap
           retrieveAllLinksFromSite (the retrieved url ,Level+1) //recursively call for

 further levels
            }

        }

}
于 2012-09-26T02:33:46.580 に答える