本文的文字及圖檔來源于網絡,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理。
以下文章來源于IT共享之家,作者:IT共享者

【一、項目背景】
相信大家都有一種頭疼的體驗,要下載下傳電影特别費勁,對吧?要一部一部的下載下傳,而且不能直覺的知道最近電影更新的狀态。
今天小編以電影天堂為例,帶大家更直覺的去看自己喜歡的電影,并且下載下傳下來。
【二、項目準備】
首先 我們第一步我們要安裝一個Pycharm的軟體。Pycharm軟體安裝可以看這篇教程:Python環境搭建—安利Python小白的Python和Pycharm安裝詳細教程。
電影天堂網的網址:
https://www.ygdy8.net/html/gndy/dyzz/list_23_1.html
我們需要下載下傳幾個庫,怎麼下載下傳呢?首先打開Pycharm點選File再點開setting。
打開後會出現這個界面點選你的項目名字(project:(你的項目名字))project interpreter點選加号下載下傳我們需要的庫本項目需要(requests,requests,time,re子產品),如下圖所示。
如果不會加載解釋器的話,可以參考這篇手把手教程:安裝好Pycharm後如何配置Python解釋器簡易教程。
如果還缺少相應庫的話,可以按照如下方式進行下載下傳和安裝。
【三、項目實施】
我們需要(requests,requests,time,re子產品 ),如下圖所示。
用封裝方法去實作各個部分功能。首先要寫一個架構 :構造一個類FilmSky 然後定義一個—init方法裡繼承(self),再定義一個主方法(main)。最後實作這個main方法。代碼如下:
這個time是用于防止反爬,設定的時間延時。
首先我們來分析一下這個網址下一頁得到特點。
通過點選了三頁我們會發現位址都是在原有的基礎上“23—3,4,5”這樣的變化。
我們可以用{}去代替變化的值就像這樣:
https://www.ygdy8.net/html/gndy/dyzz/list_23_{}.html
這樣我們在inti方法初始化url位址和構造請求頭。
在主方法main函數裡邊用for循環實作周遊網址。
得到下圖這樣的結果:
說明你已經成功一半了加油!!
現在我們需要對這些網址發生請求,為了更直覺的看出來,我們用一個類寫。
我們用requests發生請求 這個網站的編碼是gbk (怎麼看網站的編碼?)。
打開一個網站右鍵檢查在header的标簽,以這個網站為例,可以看到charset=“gb312”。
這個gb2312就是編碼 我們常見的編碼方式有2種(utf_8, gbk)。
我們可以驗證一下是不是真的請求到了。使用Print(html)看到這個結果(一個完整的html網頁)說明請求成功。
我們再定義這個方法(對我們的網頁代碼進行解析)。
我們用正規表達式 來解析資料 我們右鍵檢查可以看到我們要的網站在table裡面的<tr>标簽的<b>标簽的<a>标簽的href。
是以我們可以先找到table,一層一層的去找,可以參考一下下面的圖。
正規表達式就是(.*?)裡面就是你想要得到的内容,“.*?”就是可以省略其中的标簽,取到你想要地區那一層。for循環周遊得到每個網址,點選這些網址我們要對二級頁面發生請求,并解析它。
因為在網頁網址上的連結有一些是空的 ,是以這樣會導緻電影下載下傳的連結不比對。是以我們要加個判斷,如果下載下傳連結的長度大于0那麼就照常顯示,否則就給它一個空值,這樣就不會不對應了。最後傳回這個結果,如下圖所示。
點開第二級頁面如圖右鍵點選下載下傳連結,如下圖所示:
我們用正規表達式解析 得到我們下載下傳連結位址,如下圖所示:
看去了不是很美觀,我們把連結處理一下,如下圖所示:
得到結果,如下圖所示:
最後我們用把資料儲存在一個字典加上下載下傳連結和電影名字:
最後我們優化一下請求的代碼有點重複 我們優化一下;
用一個值去儲存說明請求頭的内容以後請求我們隻有調用這個方法進行請求就好,如下圖所示:
程式運作之後可以看到效果圖,如下圖所示:
點選藍色的連結就可以這個下載下傳(要下載下傳迅雷 迅雷下載下傳更快哇)
這樣是不是能夠更直覺的看出你要電影啦?點選即可下載下傳噢!
【五、總結】
1. 本文基于Python網絡爬蟲技術,提供了一種更直覺的去看自己喜歡的電影并且友善下載下傳的方式。
2. 不建議抓取太多,容易使得伺服器負載。