2017-06-05 94 views
0

以下代碼昨天工作,現在它掛在終端上,出現錯誤list index out of range,但是當我使用IDE運行相同的代碼時,它完美地工作。使用Requests.get()時遇到問題

我不明白是怎麼回事。並且沒有網址無效。

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

你在做什麼?詳細的錯誤是什麼,像trackback?您是否嘗試打印變量以確保其符合預期?或者使用'pdb'來調試這個程序? – cizixs

回答

1

的問題是,如果你的頁面中不包含有.size-dropdown-block類中的任何元素,你ListOfRawSizes[0]指數將超出範圍。如果列表爲空,則不能要求列表中的第一個項目,這會拋出index out of range錯誤。這很可能是由於網頁與前一天不同而造成的,現在您已嘗試過。

在嘗試爲列表建立索引之前,您需要檢查ListOfRawSizes是否有任何項目。幸運的是,python可以輕鬆檢查列表是否爲空,如果列表中至少有一個項目,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中的變量遵循「蛇案」慣例;全部用小寫字母分開單詞。 (例如:this_is_snake_case)。

+0

非常感謝你如果我問你關於請求模塊的另一個問題嗎? – Tavaris

+0

這不是一個論壇;您可以單獨詢問Stack Overflow的另一個問題。如果此答案解決了您最直接的問題,請將其標記爲正確,然後創建新問題。 – Soviut

+0

好吧,我確實,你介意看看嗎? https://stackoverflow.com/q/44428365/8095150 – Tavaris