基本的なフォルダシステムを持ち、キーワードでフォルダがラベリングされているWebサイトをスクラップする必要があります。私はすべてのページ(フォルダ)をスキャンし、新しいフォルダへのリンクをチェックし、キーワードとファイルを記録する必要があります。私の主な問題はもっと抽象的です。ネストされたフォルダと未知の "深さ"を持つディレクトリがある場合、それらをすべて反復処理する最もpythoncな方法は何ですか? [「深さ」が分かっていれば、本当に単純なループになります)。アイデアは大きく訴えました。HTMLスクレイピング:ネストされたディレクトリを繰り返します
0
A
答えて
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を使用しています。
2
通常、再帰は最も簡単な方法です。
しかし、誰かがそれ自身または親へのシンボリックリンクを持つディレクトリを作成すると、しばらくしてからStackOverflowErrorが返されることがあります。
+0
ありがとうございます。問題への両方の答えが問題を解決できると私には思われます。しかし、私がPython/recursionをかなり新しく導入したので、これらの2つのオプションを比較しやすくするために、(疑似)コードの小さなスニペットを提供することは可能でしょうか。 – root
関連する問題
- 1. 例えば繰り返し、ネストされた素子構造を考えると、ネストされた、繰り返し素子構造
- 2. C#反復的にネストされたプロパティリストを繰り返し処理する
- 3. 繰り返し接続されたコンポーネントアルゴリズム
- 4. ハッシュおよび/または配列を含むネストされたハッシュを繰り返します。
- 5. VS2008ツールボックスコントロールが繰り返されます
- 6. 数値を0.01回繰り返すと、数回繰り返した後に.0000000000000001が加算されます。
- 7. Javascript FileAPI:ディレクトリを繰り返しますか?
- 8. HTML/CSS繰り返し+画像ヘッダー
- 9. MVCビューは繰り返しHTMLを防止します
- 10. 一部のものが一般的な場合はネストされたプロパティを繰り返します。
- 11. Knockout.jsテーブル内のネストされたモデル/コンテナレス "foreach"テーブルの行を繰り返します
- 12. NewValuesコレクションとHTMLエンコードをすべて繰り返します。
- 13. 2つのネストされたforループとコンストラクタを使用して繰り返しパターンを出力する
- 14. 正規表現:これをキャプチャする方法? (繰り返しグループ内のネストされたグループ)
- 15. YQLを使用したHTMLスクレイピング
- 16. phingでディレクトリを繰り返し処理(ループ)する方法は?
- 17. HTML電子メールとLotus Notes - 内容が繰り返されています
- 18. はWAMPをServerは、ネストされたディレクトリ
- 19. htmlのネストされたメッセージ
- 20. htmlネストされたリスト
- 21. 繰り返しでディレクトリを検索するときにディレクトリをスキップする方法はありますか? (C#)
- 22. viewDidAppearが繰り返し呼び出されます
- 23. 各行に対して出力が繰り返されます
- 24. CoreBluetoothが繰り返し切断されています
- 25. Python、プロトコルバッファー、ネストされたメッセージと繰り返しフィールドが機能するようにする
- 26. XSL FO分割されたスパンセルの内容を繰り返します
- 27. 1つのSQLクエリで「リンクされたリスト」を繰り返しますか?
- 28. エンコーディング、データ型、およびパックされた繰り返しフィールド
- 29. 暗号化されたデータの繰り返し - 赤旗?
- 30. htmlマークアップ:複数/繰り返しhtml、head、bodyタグなど - 結果
あなたの答えをありがとう - それはうまくいきます。しかし、間違いがあると思います。dequeオブジェクトには追加の属性がありません。追加する必要があります。 – root
@priilane:ようこそ。私のポストはPythonを動作させるより擬似コードです...それにもかかわらず、修正されました。 – georg