2017-06-05 18 views
0

次のコードは昨日働いていましたが、今度は端末に掛けてエラーlist index out of rangeを与えていますが、IDEを使って同じコードを実行すると完全に動作します。Requests.get()に問題がありました

何が起こっているのか分かりません。そして、そのURLは無効ではありません。

import requests 
import bs4 
import webbrowser  
import csv 


def CheckStock(url): 
'''checks for shoes in stock''' 
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} 
    RawHTML = requests.get(url, headers=headers) 
    Page = bs4.BeautifulSoup(RawHTML.text, "lxml") 
    ListOfRawSizes = Page.select('.size-dropdown-block') 
    Sizes = str(ListOfRawSizes[0].getText()).replace('\t', '') 
    Sizes = Sizes.replace('\n\n', ' ') 
    Sizes = Sizes.split() 
    Sizes.remove('Select') 
    Sizes.remove('size') 
    return Sizes  
+0

'print(ListOfRawSizes)'がお手伝いします –

+0

あなたは何をしようとしていますか?トラックバックのような詳細なエラーは何ですか?変数を印刷して、期待通りの結果を出そうとしましたか?あるいは 'pdb'を使ってこのプログラムをデバッグしますか? – cizixs

答えて

1

問題は、あなたのページが.size-dropdown-blockクラスを持つすべての要素が含まれていない場合は、お使いのListOfRawSizes[0]インデックスが範囲外になりますです。リストが空であれば、リスト内の最初の項目を尋ねることはできません。それはindex out of rangeエラーをスローします。これは、前日と違うページが今試したときと違うことが原因です。

リストにインデックスを作成する前に、ListOfRawSizesにアイテムがあるかどうかを確認する必要があります。幸いにも、pythonはリストが空であるかどうかを確認するのを容易にします。リストに少なくとも1つの項目がある場合、if ListOfRawSizes:は真となります。

ListOfRawSizes = Page.select('.size-dropdown-block') 

# check to see if the list of raw sizes is not empty 
if ListOfRawSizes: 
    # we have at least one size so get the first item and do our work 
    Sizes = str(ListOfRawSizes[0].getText()).replace('\t', '') 
    Sizes = Sizes.replace('\n\n', ' ') 
    Sizes = Sizes.split() 
    Sizes.remove('Select') 
    Sizes.remove('size') 
    return Sizes 
# if we hit the else clause, our list must be empty 
else: 
    # ...so return an empty list 
    return [] 

さらに、大文字で始まる変数の名前を付けないでください。これはクラス名と非常に簡単に衝突する可能性があります。 Pythonの変数は "snake case"の規則に従います。小文字はすべて単語を区切るために下線付きです。 (例:this_is_snake_case)。

+0

リクエストモジュールについて別の質問をしていただきありがとうございます。 – Tavaris

+0

これはディスカッションフォーラムではありません。 Stack Overflowの別の質問を別途お願いできます。この回答があなたの最も直近の問題を解決した場合は、それを正しいものとしてマークし、新しい質問を作成してください。 – Soviut

+0

さて、私はそれをチェックしてもよろしいですか? https://stackoverflow.com/q/44428365/8095150 – Tavaris

関連する問題