上次说对照代码,死活找不到程序运行的错误,可谓百思不得其姐。
老办法,问度娘。
关于错误“IndexError: list index out of range”,一般是两种可能:
第一种是 index 超出范围;
第二种是 list 是一个空的,没有一个元素。
很明显,我这错误属于第一种。
但是,明明我指定的是 (0,250)的范围,为毛会到26就报错了呢?
抱着试试看的办法,使用下 debug按钮,没想到,一看还真发现了一片新天地。
断点设在报错的129行,结果按下 debug,datalist显示的网址是1828115。
凭借我鹰的眼睛,狼的耳朵,豹的速度,熊的力量,我果断意识到,这个网址有问题。
打开这个网址,我就惊呆了。
色戒?竟然是色戒!
没错,每个看过此片(尤其是未删减版的,啧啧)的男人都承认,这片确实是经典。
但是,但是,它不该是遍历出的第一个结果啊。
再看它的排名:226。
答案一下子就清楚了,怪不得到26就报错了,因为再后面就超过250部电影,就没了啊。
数据溢出,自然就报错了。
试着把 for in 的范围改一下,果然,程序运行就没有问题了。
所以,问题的根源就是,程序中的哪个位置,网址变成了《色戒》的?
问题一定是出在 datalist 上准没跑了,盯着这条线索就好了。
这家伙第一次出现就是在 main 函数中,要说这块都是常规操作,应该没啥问题,不过小心点没坏处。
结果,没想到问题还真就出在这块。
baseurl 定义时,网址还是好好的,结果到了datalist 时候,网址就变成了 1828115 ,嗯,也就是《色戒》的网址了。
这是什么鬼?
难道我这程序能他么自动识别我想看啥,然后直接变更不成?!
细思极恐。
追根溯源,看来就是 getData 函数中出现的问题。
把断点设在解析数据的 for 循环位置,debug后,可以看到上面的 url 变成了 start=225。
嗯?这就不对了,合着下面的程序啥也没干呢,您自己循环了225次,玩的挺嗨啊!
你们哥俩各自循环各自的,谁也不管谁,这就太不仗义了吧。
把下面的内容整体缩进。
再运行下程序。
哈哈哈哈哈哈哈哈!
成功搞定!
再打开存储文件的 豆瓣电影Top250.xls。
整齐的排列、详尽的数据,太令人感动了,当浮一大白!
如果昨天直接跟老师一起就把结果做出来,可能还没有这么激动。
经过自己的一番查找,不仅对代码的理解加深了,更对结果有种难以置信的不真实感。
虽然学习之初确实是奔着爬虫来的,但是真能把结果弄出来,还是有种“有生之年”之感。
最后,特此感谢大佬@DAMON58031404、@hey你的张益达 对我的指点。
作者简介:冯十一,40岁仍然坚持学习的哏儿都老男人。多平台签约作者,日更写作践行者,每周阅读一本书。欢迎关注@天津冯十一