上次說對照代碼,死活找不到程序運行的錯誤,可謂百思不得其姐。
![第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250](http://p2.ttnews.xyz/loading.gif)
老辦法,問度娘。
關於錯誤“IndexError: list index out of range”,一般是兩種可能:
第一種是 index 超出範圍;
第二種是 list 是一個空的,沒有一個元素。
很明顯,我這錯誤屬於第一種。
但是,明明我指定的是 (0,250)的範圍,為毛會到26就報錯了呢?
抱著試試看的辦法,使用下 debug按鈕,沒想到,一看還真發現了一片新天地。
斷點設在報錯的129行,結果按下 debug,datalist顯示的網址是1828115。
![第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250](http://p2.ttnews.xyz/loading.gif)
憑藉我鷹的眼睛,狼的耳朵,豹的速度,熊的力量,我果斷意識到,這個網址有問題。
打開這個網址,我就驚呆了。
色戒?竟然是色戒!
沒錯,每個看過此片(尤其是未刪減版的,嘖嘖 )的男人都承認,這片確實是經典。
但是,但是,它不該是遍歷出的第一個結果啊。
再看它的排名:226。
答案一下子就清楚了,怪不得到26就報錯了,因為再後面就超過250部電影,就沒了啊。
數據溢出,自然就報錯了。
試著把 for in 的範圍改一下,果然,程序運行就沒有問題了。
所以,問題的根源就是,程序中的哪個位置,網址變成了《色戒》的?
問題一定是出在 datalist 上準沒跑了,盯著這條線索就好了。
這傢伙第一次出現就是在 main 函數中,要說這塊都是常規操作,應該沒啥問題,不過小心點沒壞處。
結果,沒想到問題還真就出在這塊。
baseurl 定義時,網址還是好好的,結果到了datalist 時候,網址就變成了 1828115 ,嗯,也就是《色戒》的網址了。
這是什麼鬼?
難道我這程序能他麼自動識別我想看啥,然後直接變更不成?!
細思極恐。
追根溯源,看來就是 getData 函數中出現的問題。
把斷點設在解析數據的 for 循環位置,debug後,可以看到上面的 url 變成了 start=225。
嗯?這就不對了,合著下面的程序啥也沒幹呢,您自己循環了225次,玩的挺嗨啊!
你們哥倆各自循環各自的,誰也不管誰,這就太不仗義了吧。
把下面的內容整體縮進。
再運行下程序。
哈哈哈哈哈哈哈哈!
成功搞定!
再打開存儲文件的 豆瓣電影Top250.xls。
整齊的排列、詳盡的數據,太令人感動了,當浮一大白!
如果昨天直接跟老師一起就把結果做出來,可能還沒有這麼激動。
經過自己的一番查找,不僅對代碼的理解加深了,更對結果有種難以置信的不真實感。
雖然學習之初確實是奔著爬蟲來的,但是真能把結果弄出來,還是有種“有生之年”之感。
最後,特此感謝大佬@DAMON58031404、@hey你的張益達 對我的指點。
作者簡介:馮十一,40歲仍然堅持學習的哏兒都老男人。多平臺簽約作者,日更寫作踐行者,每週閱讀一本書。歡迎關注@天津馮十一