第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

上次說對照代碼,死活找不到程序運行的錯誤,可謂百思不得其姐。

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

老辦法,問度娘。

關於錯誤“IndexError: list index out of range”,一般是兩種可能:

第一種是 index 超出範圍;

第二種是 list 是一個空的,沒有一個元素。

很明顯,我這錯誤屬於第一種。

但是,明明我指定的是 (0,250)的範圍,為毛會到26就報錯了呢?

抱著試試看的辦法,使用下 debug按鈕,沒想到,一看還真發現了一片新天地。

斷點設在報錯的129行,結果按下 debug,datalist顯示的網址是1828115。

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

憑藉我鷹的眼睛,狼的耳朵,豹的速度,熊的力量,我果斷意識到,這個網址有問題。

打開這個網址,我就驚呆了。

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

色戒?竟然是色戒!

沒錯,每個看過此片(尤其是未刪減版的,嘖嘖

)的男人都承認,這片確實是經典。

但是,但是,它不該是遍歷出的第一個結果啊。

再看它的排名:226。

答案一下子就清楚了,怪不得到26就報錯了,因為再後面就超過250部電影,就沒了啊。

數據溢出,自然就報錯了。

試著把 for in 的範圍改一下,果然,程序運行就沒有問題了。

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

所以,問題的根源就是,程序中的哪個位置,網址變成了《色戒》的?

問題一定是出在 datalist 上準沒跑了,盯著這條線索就好了。

這傢伙第一次出現就是在 main 函數中,要說這塊都是常規操作,應該沒啥問題,不過小心點沒壞處。

結果,沒想到問題還真就出在這塊。

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

baseurl 定義時,網址還是好好的,結果到了datalist 時候,網址就變成了 1828115 ,嗯,也就是《色戒》的網址了。

這是什麼鬼?

難道我這程序能他麼自動識別我想看啥,然後直接變更不成?!

細思極恐。

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

追根溯源,看來就是 getData 函數中出現的問題。

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

把斷點設在解析數據的 for 循環位置,debug後,可以看到上面的 url 變成了 start=225。

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

嗯?這就不對了,合著下面的程序啥也沒幹呢,您自己循環了225次,玩的挺嗨啊!

你們哥倆各自循環各自的,誰也不管誰,這就太不仗義了吧。

把下面的內容整體縮進。

再運行下程序。

哈哈哈哈哈哈哈哈!

成功搞定!

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

再打開存儲文件的 豆瓣電影Top250.xls。

整齊的排列、詳盡的數據,太令人感動了,當浮一大白!

第53天,我找到Python代碼錯誤,終於成功爬取了豆瓣電影top250

如果昨天直接跟老師一起就把結果做出來,可能還沒有這麼激動。

經過自己的一番查找,不僅對代碼的理解加深了,更對結果有種難以置信的不真實感。

雖然學習之初確實是奔著爬蟲來的,但是真能把結果弄出來,還是有種“有生之年”之感。

最後,特此感謝大佬@DAMON58031404、@hey你的張益達 對我的指點。

作者簡介:馮十一,40歲仍然堅持學習的哏兒都老男人。多平臺簽約作者,日更寫作踐行者,每週閱讀一本書。歡迎關注@天津馮十一


分享到:


相關文章: