第53天,我找到Python代码错误,终于成功爬取了豆瓣电影top250

上次说对照代码,死活找不到程序运行的错误,可谓百思不得其姐。

老办法,问度娘。

关于错误“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岁仍然坚持学习的哏儿都老男人。多平台签约作者,日更写作践行者,每周阅读一本书。欢迎关注@天津冯十一