【一、項(xiàng)目背景】 相信大家都有一種頭疼的體驗(yàn),,要下載電影特別費(fèi)勁,,對(duì)吧?要一部一部的下載,,而且不能直觀的知道最近電影更新的狀態(tài),。 今天小編以電影天堂為例,帶大家更直觀的去看自己喜歡的電影,,并且下載下來(lái),。 【二、項(xiàng)目準(zhǔn)備】 首先 我們第一步我們要安裝一個(gè)Pycharm的軟件,。Pycharm軟件安裝可以看這篇教程:Python環(huán)境搭建—安利Python小白的Python和Pycharm安裝詳細(xì)教程,。 電影天堂網(wǎng)的網(wǎng)址: https://www./html/gndy/dyzz/list_23_1.html 我們需要下載幾個(gè)庫(kù),怎么下載呢,?首先打開(kāi)Pycharm點(diǎn)擊File再點(diǎn)開(kāi)setting,。 打開(kāi)后會(huì)出現(xiàn)這個(gè)界面點(diǎn)擊你的項(xiàng)目名字(project:(你的項(xiàng)目名字))project interpreter點(diǎn)擊加號(hào)下載我們需要的庫(kù)本項(xiàng)目需要(requests,requests,,time,,re模塊),如下圖所示,。 如果還缺少相應(yīng)庫(kù)的話,,可以按照如下方式進(jìn)行下載和安裝。 【三,、項(xiàng)目實(shí)施】 我們需要(requests,,requests,time,,re模塊 ),,如下圖所示。 用封裝方法去實(shí)現(xiàn)各個(gè)部分功能,。首先要寫(xiě)一個(gè)框架 :構(gòu)造一個(gè)類(lèi)FilmSky 然后定義一個(gè)—init方法里繼承(self),,再定義一個(gè)主方法(main),。最后實(shí)現(xiàn)這個(gè)main方法,。代碼如下: 這個(gè)time是用于防止反爬,設(shè)置的時(shí)間延時(shí)。 首先我們來(lái)分析一下這個(gè)網(wǎng)址下一頁(yè)得到特點(diǎn),。 通過(guò)點(diǎn)擊了三頁(yè)我們會(huì)發(fā)現(xiàn)地址都是在原有的基礎(chǔ)上“23—3,,4,5”這樣的變化,。 我們可以用{}去代替變化的值就像這樣: https://www./html/gndy/dyzz/list_23_{}.html 這樣我們?cè)趇nti方法初始化url地址和構(gòu)造請(qǐng)求頭,。 在主方法main函數(shù)里邊用for循環(huán)實(shí)現(xiàn)遍歷網(wǎng)址。 得到下圖這樣的結(jié)果: 說(shuō)明你已經(jīng)成功一半了加油??! 現(xiàn)在我們需要對(duì)這些網(wǎng)址發(fā)生請(qǐng)求,為了更直觀的看出來(lái),,我們用一個(gè)類(lèi)寫(xiě),。 我們用requests發(fā)生請(qǐng)求 這個(gè)網(wǎng)站的編碼是gbk (怎么看網(wǎng)站的編碼?)。 打開(kāi)一個(gè)網(wǎng)站右鍵檢查在header的標(biāo)簽,,以這個(gè)網(wǎng)站為例,,可以看到charset=“gb312”。 這個(gè)gb2312就是編碼 我們常見(jiàn)的編碼方式有2種(utf_8, gbk),。 我們可以驗(yàn)證一下是不是真的請(qǐng)求到了,。使用Print(html)看到這個(gè)結(jié)果(一個(gè)完整的html網(wǎng)頁(yè))說(shuō)明請(qǐng)求成功。 我們?cè)俣x這個(gè)方法(對(duì)我們的網(wǎng)頁(yè)代碼進(jìn)行解析),。 我們用正則表達(dá)式 來(lái)解析數(shù)據(jù) 我們右鍵檢查可以看到我們要的網(wǎng)站在table里面的 標(biāo)簽的標(biāo)簽的href,。
所以我們可以先找到table,一層一層的去找,,可以參考一下下面的圖,。
正則表達(dá)式就是(.*?)里面就是你想要得到的內(nèi)容,,“.*,?”就是可以省略其中的標(biāo)簽,取到你想要地區(qū)那一層,。for循環(huán)遍歷得到每個(gè)網(wǎng)址,,點(diǎn)擊這些網(wǎng)址我們要對(duì)二級(jí)頁(yè)面發(fā)生請(qǐng)求,并解析它,。 因?yàn)樵诰W(wǎng)頁(yè)網(wǎng)址上的鏈接有一些是空的 ,,所有這樣會(huì)導(dǎo)致電影下載的鏈接不匹配。所以我們要加個(gè)判斷,,如果下載鏈接的長(zhǎng)度大于0那么就照常顯示,,否則就給它一個(gè)空值,這樣就不會(huì)不對(duì)應(yīng)了,。最后返回這個(gè)結(jié)果,,如下圖所示,。
點(diǎn)開(kāi)第二級(jí)頁(yè)面如圖右鍵點(diǎn)擊下載鏈接,如下圖所示:
我們用正則表達(dá)式解析 得到我們下載鏈接地址,,如下圖所示:
看去了不是很美觀,,我們把鏈接處理一下,如下圖所示:
得到結(jié)果,,如下圖所示:
最后我們用把數(shù)據(jù)保存在一個(gè)字典加上下載鏈接和電影名字:
最后我們優(yōu)化一下請(qǐng)求的代碼有點(diǎn)重復(fù) 我們優(yōu)化一下,; 用一個(gè)值去保存說(shuō)明請(qǐng)求頭的內(nèi)容以后請(qǐng)求我們只有調(diào)用這個(gè)方法進(jìn)行請(qǐng)求就好,如下圖所示:
程序運(yùn)行之后可以看到效果圖,,如下圖所示:
|
|
來(lái)自: 仙熊 > 《我的圖書(shū)館》