2017-11-16 9 views
-1

私はPythonにとって非常に新しいです。これは、実際に私が初めて作成したプログラムです。それは途中でウェブサイトのサイトマップとコレクションデータを経由している単純なWebクローラーです。このループは問題なく何度も実行され、すべてのファイルはこのループを3000回以上実行します。約100のファイルの後、私は範囲外のエラーのインデックスを取得し、私は理由を知りません。Pythonループ:インデックスが範囲外ですERROR

for item in soup.find_all('loc'): 
    newsItem = { 
     'Category': '', 
     'Title': '', 
     'Url':  '' 
    } 

    newsItem['Category'] = list(filter(None, item.text.replace(
     'http://www.nu.nl', '').replace('.html', '').split('/')))[0].title() 
    newsItem['Title'] = list(filter(None, item.text.replace(
     'http://www.nu.nl', '').replace('.html', '').split('/')))[2].replace('-', ' ').title() 
    newsItem['Url'] = item.text 
    newsItems.append(newsItem) 
    print_progress(counter, len(soup.find_all('loc')), 'Progress:') 
    counter += 1 

エラー:ここでの問題を与えているループである

Traceback (most recent call last): 
    File "theVerge.py", line 52, in <module> 
    'http://www.nu.nl', '').replace('.html', '').split('/')))[2].replace('-', ' ').title() 
IndexError: list index out of range 
+2

あなたが見た例外のスタックトレースを含めるために役立つだろう。このコードを読んで、私は

list(filter(None, item.text.replace('http://www.nu.nl', '').replace('.html', '').split('/')))[2].replace('-', ' ').title() 

が、私は入力の例を持っていた場合でも、どうなるのか見当がつかない。一つの推測では、複数の '/'を持たないURLを打っているということでしょうか?したがって、 'Title'属性を抽出しようとすると例外が発生します... – user

+0

try-exceptブロックを使用してみませんか? –

+0

@ t.m.adam、そう、それは私が最後にやったことです。 1.2mループではコンテンツがない1つのURLがあったようです... –

答えて

1

はトレースバックがなければ、私の最高の推測では、この行のようになります。

newsItem['Title'] = list(filter(None, item.text.replace('http://www.nu.nl', '').replace('.html', '').split('/')))[2].replace('-', ' ').title() 

私が何であれ推測しています結果は

newsItem['Title'] = list(filter(None, item.text.replace('http://www.nu.nl', '').replace('.html', '').split('/'))) 

内部に3つのアイテムがないため、[2]インデックスが範囲外です。

ああ、ちょっと...それはあなたが持っている線を置き換える本当のぎりぎりの文字列です。読みやすくするために、これらを分解したり、より良い方法を見つけることができます。 P

+0

あなたの答えはちょっとありがとう、このURLのように見えます:http://www.nu.nl/selectie/4090934/voorbeschouwing-zestiende- tour-france-etappe.html。私がやっていることは、最初の/の後にカテゴリを抽出し、IDの後にタイトルをつけることです。 –

+0

Ah。私はこの場合、正規表現のパターンマッチングを試してみたいと思うかもしれません。これは分割の束よりも簡単です。 – rob

+0

正規表現でこれを簡単に行う方法はありますか? –

関連する問題