2016-04-03 2 views
0

私はPythonで自分の足を濡らすための簡単なWebスクレイピングスクリプトを作成しています。 私はアイデアが、私は、3つのリストのそれぞれに電子メール、電話、およびWebアドレスを取得togtherそれらを圧縮して、反復処理ということで、次のリストに追加する際の問題 - IndexError:リストインデックスが範囲外です。

#Create 3 different lists to populate. 
mails = [] 
phones = [] 
webs = [] 

def go_get_info(info): 
    for item in info: 
     #email = (item.contents[3].find_all("span", {"class": "text"})[0].text).strip() 
     #phone = (item.contents[3].find_all("span", {"class": "text"})[1].text).strip()                           
     www = (item.contents[3].find_all("span", {"class": "text"})[2].text).strip() 
     if not www: 
       webs.append("empty") 
     else: 
       webs.append(www) 

と少しが、問題のを打つことだし、 CSVに書き込む。

私が問題を抱えているように見えるのは、www **です(それで、私はそれをコメント解除したままにしています)。 **私はまた、空の条件を追加することによって、問題を軽減しようとしました。****

が、私はこの関数を呼び出すスクリプトを実行すると、私は戻ってい

± |add-csv-support U:1 ?:1 ✗| → python scrape.py 
Traceback (most recent call last): 
    File "scrape.py", line 55, in <module> 
    go_retrieve_contact(get_venue_link_list(links)) 
    File "scrape.py", line 30, in go_retrieve_contact 
    go_get_info(info) 
    File "scrape.py", line 43, in go_get_info 
    www = (item.contents[3].find_all("span", {"class": "text"})[2].text).strip() 
IndexError: list index out of range 

を以下のそれは理にかなっていますその問題は返される値または値の不足のいずれかであることがわかります。私はグーグルでは、完全な解決策を見つけることができませんでした。

私は

Aにこのケースでは何ができます)より良い起こっおよびデバッグより良いいただきまし理解しています。

B)問題を解決します。

おかげで、

+0

を使用する場合がありますfind_all'は一致するリストを返します。インデックス2が範囲外である場合、それは3つ未満の一致が見つかったことを意味します。結果を変数に保存し、そこにない要素にアクセスしようとする前に*の長さをチェックします。次に、そのケースをどのように処理するかを決めることができます。 –

答えて

1

問題は、4番目の要素(item.contents[3])または第三要素(find_all(...)[2])を参照しているし、それらの2つのアレイのうちの1つは、どのようなlist index out of range手段であること、多くの要素を、持っていないということです。

www = (item.contents[3].find_all("span", {"class": "text"})[2].text).strip() 

これはスクレーピング・ツールの一部であるため、あなたは `私が考えるif len((...).find_all(...)) >= 3声明の中で、それをネストすることによって、あなたのfind_allになっているどのように多くの要素をチェックラインを書いたり、try except

関連する問題