2012-05-12 13 views
0

基本的なフォルダシステムを持ち、キーワードでフォルダがラベリングされているWebサイトをスクラップする必要があります。私はすべてのページ(フォルダ)をスキャンし、新しいフォルダへのリンクをチェックし、キーワードとファイルを記録する必要があります。私の主な問題はもっと抽象的です。ネストされたフォルダと未知の "深さ"を持つディレクトリがある場合、それらをすべて反復処理する最もpythoncな方法は何ですか? [「深さ」が分かっていれば、本当に単純なループになります)。アイデアは大きく訴えました。HTMLスクレイピング:ネストされたディレクトリを繰り返します

答えて

2

単純なスパイダーアルゴリズムです。これは反復的であり、そのようなものとして、任意の深い木で作業ができることを

active = deque() 
seen = set() 

active.append(first document) 

while active is not empty: 
    document = active.popleft() 
    if document in seen: 
     continue 

    # do stuff with the document -- e.g. index keywords 

    seen.add(document) 
    for each link in the document: 
     active.append(link) 

注:これは、処理すべき文書や、すでに処理された文書のセットに対してdequeを使用しています。

+0

あなたの答えをありがとう - それはうまくいきます。しかし、間違いがあると思います。dequeオブジェクトには追加の属性がありません。追加する必要があります。 – root

+0

@priilane:ようこそ。私のポストはPythonを動作させるより擬似コードです...それにもかかわらず、修正されました。 – georg

2

通常、再帰は最も簡単な方法です。

しかし、誰かがそれ自身または親へのシンボリックリンクを持つディレクトリを作成すると、しばらくしてからStackOverflowErrorが返されることがあります。

+0

ありがとうございます。問題への両方の答えが問題を解決できると私には思われます。しかし、私がPython/recursionをかなり新しく導入したので、これらの2つのオプションを比較しやすくするために、(疑似)コードの小さなスニペットを提供することは可能でしょうか。 – root

関連する問題