我的python之路二(爬豆瓣電影Top250)
終于把豆瓣Top250的數(shù)據(jù)收入囊中了,總結(jié)一下。
首先是跟著B(niǎo)站“老網(wǎng)紅Alex講Python”學(xué)的,是學(xué)到P19的結(jié)果。
視頻講解的非常簡(jiǎn)潔、到位。簡(jiǎn)潔是說(shuō)他沒(méi)有廢話,不會(huì)說(shuō)些有的沒(méi)的,到位是他真的是有用的都說(shuō)了,用不到的不說(shuō)。
跟著坐下來(lái),我也寫(xiě)完了我的第一個(gè)爬蟲(chóng)程序,成功的收集到了Top250資料。我一向是實(shí)用優(yōu)先,對(duì)于用不到的知識(shí)我是一點(diǎn)也沒(méi)有耐心學(xué)。所以接下來(lái)我就準(zhǔn)備按個(gè)電影,看看我的電影資料庫(kù)里有沒(méi)有,看沒(méi)看過(guò),沒(méi)看過(guò)的自然是要當(dāng)一下了。
等我興沖沖的打開(kāi)CSV文件,馬上就發(fā)現(xiàn)一個(gè)大問(wèn)題:數(shù)目不夠。不是250個(gè)嗎,怎么只有230多個(gè),這不可忍,馬上查找原因。
對(duì)比了丟失的電影,發(fā)現(xiàn)是字段不全鬧的。我關(guān)注的字段和老師有所不同,我是收集了“電影名”“年份”“國(guó)別”“類型”乃至“一句話評(píng)語(yǔ)”,不難看出,這些都是迅速了解這部電影是啥電影的一個(gè)切入口,哪年的電影、哪個(gè)國(guó)家的、什么類型的,一句話評(píng)語(yǔ)也可以大概了解電影的主題。?

問(wèn)題就出在“一句話評(píng)語(yǔ)”上,因?yàn)橛泻芏嚯娪?,(第一個(gè)就是第131部《寄生蟲(chóng)》沒(méi)有評(píng)語(yǔ))沒(méi)有這個(gè)東西。這就導(dǎo)致了,正則匹配時(shí),由于找不到,就越過(guò)每部電影的邊界去找下一部電影的評(píng)語(yǔ),這樣就把下一部電影的前面的字段都越過(guò)去了。
然后開(kāi)始想辦法,首先是又找了一些講正則的資料,看看能不通過(guò)正則解決,研究了兩天失敗了。因?yàn)檎齽t始終都是想辦法匹配上,它沒(méi)法實(shí)現(xiàn)“沒(méi)有就忽略”這樣的問(wèn)題。
思來(lái)想去,還得通過(guò)程序控制來(lái)解決問(wèn)題。因?yàn)榍懊娴男枰侄问敲坎侩娪岸加械模拖刃薷某绦?,保留前面的,然后在后面單?dú)加上處理評(píng)語(yǔ)的。
做法就是,先保存前面的字段,然后加入條件語(yǔ)句,掃描字串里(為了減少誤判,我又加了一個(gè)內(nèi)循環(huán),按每部電影把每次收到的頁(yè)面拆分成25個(gè),因此只在一部電影的源代碼里面搜索)是否有“一句話評(píng)語(yǔ)”的特征碼,使用的是字符串的.find()方法。如果有,再進(jìn)行一次正則,挑選出評(píng)語(yǔ),沒(méi)有就不再正則了。不管有沒(méi)有,都寫(xiě)入一個(gè)換行符。這樣就實(shí)現(xiàn)了有就寫(xiě)入,沒(méi)有就跳過(guò)。
最后是成功了。

接下來(lái)要暫停學(xué)習(xí)爬蟲(chóng)了,準(zhǔn)備學(xué)習(xí)調(diào)試。因?yàn)槲疫@里調(diào)試了一下午,方法都是插入print打印變量,來(lái)觀察是否實(shí)現(xiàn),感覺(jué)太不專業(yè)了,得好好學(xué)習(xí)pycharm的調(diào)試功能。都是英文的有的難度,加油吧。