用爬蟲和Flask打造屬于自己的電影網(wǎng)站父阻,完整教程送上!

也許你曾經(jīng)為了一部電影找遍全網(wǎng)卻沒發(fā)現(xiàn)任何有用的資源钉迷,也許你曾經(jīng)被披著電影外衣的網(wǎng)站忽悠進(jìn)去而染上木馬病毒至非。一部小小的電影搞得你心力交瘁,懷疑人生糠聪。不過荒椭,作為一名合格的程序員,一向以write the code,change the world所著稱舰蟆,我們寫的代碼都能改變世界趣惠,豈能被這種小事情所屈服?不是不干身害,要干就干一票大的味悄!這一次,我們祭上萬能的Python語言塌鸯,用爬蟲技術(shù)加上Flask框架侍瑟,打造一個屬于自己的電影網(wǎng)站!界面清爽無木馬,PC手機(jī)隨心看涨颜!今年告別單身费韭,征服女神的任務(wù),就從這里開始啦~

一庭瑰、準(zhǔn)備工作

1. 首先你要一個Python解釋器星持。在目前為止,Python存在兩大主流的版本弹灭,一個是Python2.7督暂,一個是Python3.6。Python2.x歷史悠久穷吮,支持的庫多逻翁,但是畢竟是老版本,一些歷史遺留的問題未能得到解決酒来,比如編碼問題卢未,一些內(nèi)置函數(shù)的執(zhí)行性能等肪凛。而Python3優(yōu)化了Python2中的很多底層代碼堰汉,并且默認(rèn)的字符串就是unicode類型,無需擔(dān)心編碼問題伟墙,很多函數(shù)因為使用了生成器而大大的提高了代碼的執(zhí)行效率翘鸭。但是Python3因為比較新,所以一些第三方庫還來不及支持Python3(比如進(jìn)程管理工具supervisor就還未支持Python3)戳葵,但是慢慢的都在支持Python3了就乓,并且Python3也是未來的一個趨勢,Python2已經(jīng)被官方宣布在2020年將全面停止更新拱烁。所以現(xiàn)在學(xué)Python生蚁,首選Python3。因此我們本個課程戏自,也用Python3來講解邦投。如果您還沒有安裝Python3,可以到官網(wǎng):https://www.python.org擅笔,根據(jù)自己的操作系統(tǒng)志衣,選擇相應(yīng)的版本下載。安裝過程非常簡單猛们,一頓下一步就可以啦念脯,但是為了不必要的麻煩,給個小提示弯淘,千萬不要放在有中文的路徑下面哦~


2. 安裝完P(guān)ython以后绿店,如果不出意外,應(yīng)該是已經(jīng)安裝了pip庐橙。通過pip可以非常方便的管理Python第三方包假勿√杷可以在CMD或者任何shell終端輸入pip -V,如果提示了找不到pip命令废登,說明pip沒有安裝成功淹魄。那么可以通過easy_install install pip來進(jìn)行安裝。


3. requests庫堡距。這個庫是專門用來做網(wǎng)絡(luò)請求的甲锡。他比Python自帶的urllib庫好用很多,在urllib3的基礎(chǔ)之上做了進(jìn)一步的封裝羽戒,讓我們寫網(wǎng)絡(luò)請求的時候不要處理一些類似于url編碼等相關(guān)的無意義的事情缤沦。他的slogan是Http for Humans,意思是對人友好的Http請求庫易稠,可以說是非常的形象了缸废。這個庫不是Python內(nèi)置的,因此需要通過pip進(jìn)行安裝驶社。安裝方式也是非常簡單企量,只要進(jìn)入cmd或者shell終端,輸入pip install requests即可安裝亡电。


4. Scrapy框架届巩。最強(qiáng)大的爬蟲框架,沒有之一份乒!注意恕汇,他不是一個簡簡單單的庫,而是一個框架或辖。實現(xiàn)了從url匹配瘾英,到數(shù)據(jù)下載,數(shù)據(jù)解析颂暇,數(shù)據(jù)存儲等一套完整的組件缺谴。讓你寫爬蟲更加輕松,更加健壯蟀架,更加高效瓣赂。我們也是用這個框架來幫我們處理爬蟲,這樣我們可以不間斷的批量的爬取電影信息片拍,然后存儲到數(shù)據(jù)庫中煌集。Scrapy也不是Python內(nèi)置的,需要通過pip install scrapy安裝捌省。


5. MySQL服務(wù)器苫纤。數(shù)據(jù)爬取下來后,要存儲起來,以后才能通過網(wǎng)頁的形式展現(xiàn)出來卷拘。存儲數(shù)據(jù)的方式有很多喊废,比如可以存儲到JSON文件中、MySQL數(shù)據(jù)庫中栗弟、SQLite數(shù)據(jù)庫等污筷。而MySQL由于性能高、成本低乍赫、可靠性好瓣蛀,已經(jīng)成為最流行的開源數(shù)據(jù)庫,已經(jīng)被廣泛的應(yīng)用在了大中小型網(wǎng)站中雷厂。我們的數(shù)據(jù)從網(wǎng)站上爬取下來后惋增,以后還需要用在網(wǎng)站中展示。因此我們采用MySQL來存儲數(shù)據(jù)改鲫。MySQL安裝非常簡單诈皿,可以到MySQL官網(wǎng)下載安裝即可:https://dev.mysql.com/downloads/windows/installer/5.7.html。


6. Django框架像棘。Django框架是Python web開發(fā)中一款非常主流的框架稽亏。上手快,功能齊全讲弄,可以勝任大型網(wǎng)站的任務(wù)措左。他也是集HTTP協(xié)議、URL匹配避除、數(shù)據(jù)庫管理、HTML模版渲染等于一體的框架胸嘁。數(shù)據(jù)已經(jīng)從爬到數(shù)據(jù)庫中了瓶摆,下一步我們就是使用Django框架實現(xiàn)一個網(wǎng)站,動態(tài)的加載數(shù)據(jù)性宏!根據(jù)自己的需求群井,想做成什么樣就做成什么樣!Django也是第三方的毫胜,需要通過pip install django進(jìn)行安裝书斜。


二、項目架構(gòu):

在寫具體的代碼之前酵使,先來理順一下整個項目框架的結(jié)構(gòu)荐吉。爬蟲負(fù)責(zé)抓取網(wǎng)站的數(shù)據(jù),并對抓取下來的數(shù)據(jù)進(jìn)行解析和清洗口渔,然后存儲到數(shù)據(jù)庫中样屠。之后Django再從數(shù)據(jù)庫中讀取數(shù)據(jù),并將讀取的數(shù)據(jù)顯示在網(wǎng)頁中。結(jié)構(gòu)圖如下:

三痪欲、爬蟲實現(xiàn):

俗話說悦穿,巧婦難為無米之炊,再牛逼的爬蟲程序如果沒有好的數(shù)據(jù)來源业踢,也爬不到有價值的數(shù)據(jù)栗柒。因此選擇一個好的資源網(wǎng)站至關(guān)重要。這里我們選擇的是電影天堂和陽光電影兩個特別良心的網(wǎng)站知举。這兩個網(wǎng)站上有大量的高清視頻資源傍衡,每部電影都配有詳細(xì)的信息,包括演員负蠕,導(dǎo)演蛙埂,年代,類型遮糖,豆瓣評分绣的,視頻截圖等,最重要的是附有迅雷下載鏈接欲账,可以說是非常良心了屡江。但是這個網(wǎng)站經(jīng)常會有一些廣告(廣告是主要的主要的收入來源),當(dāng)你在點擊某個鏈接的時候赛不,會首先給你彈出一個新頁面惩嘉,里面嵌入的就是廣告資源,然后你再次點擊踢故,才能進(jìn)入到下一個頁面文黎。并且有時候這個網(wǎng)站還會被Chrome瀏覽器識別為病毒網(wǎng)站(不知是否真的有病毒),導(dǎo)致無法正常訪問殿较。另外最后一個就是耸峭,這個網(wǎng)站的界面相當(dāng)不美觀,對于我這種審美要求高的(特別是美女(*^_^*))碼農(nóng)來說淋纲,實在不能忍受劳闹。因此如果我們能把上面的電影資源都爬下來,再按照自己的需求實現(xiàn)一個網(wǎng)站洽瞬,顯示這些信息本涕,那就很有意思了。無論從個人角度還是商業(yè)角度來說伙窃,都是非常有價值的菩颖!這里我們使用的是Scrapy框架來實現(xiàn)的,那么以下主要從數(shù)據(jù)抓取对供,數(shù)據(jù)解析和數(shù)據(jù)存儲三個角度來進(jìn)行分析:

1. 數(shù)據(jù)抓取和解析:在寫代碼之前位他,我們首先來分析下電影天堂這個網(wǎng)站氛濒,他的首頁是包含了各種類型資源的一個組合。我們現(xiàn)在要爬取的是電影信息鹅髓,因此點擊“更多最新電影”跳轉(zhuǎn)到最新電影的列表頁面舞竿,如下圖:

可以看到這個列表頁包含了許多我們想要的電影資源,但是我們現(xiàn)在爬窿冯,只能爬取到這一頁的電影信息骗奖,怎么能把其他頁面的電影也爬下來呢,這時候就要找到每個頁面的url規(guī)則了醒串。我們可以看到执桌,第一頁電影的URL是:http://www.dytt8.net/html/gndy/dyzz/list_23_1.html,第二頁電影的URL是:http://www.dytt8.net/html/gndy/dyzz/list_23_2.html芜赌。所以我們得出一個結(jié)論就是仰挣,URL的前面部分都是一樣的,最后那個數(shù)字是幾缠沈,代表的是第幾頁膘壶。接下來就是去爬詳情頁面了。詳情頁的例圖如下:

包括電影的信息洲愤、海報颓芭,都能在這個里面找到。那么數(shù)據(jù)爬取的代碼如下:

2.數(shù)據(jù)存儲:這里我們把爬取下來的數(shù)據(jù)存儲到MySQL數(shù)據(jù)庫中柬赐。需要在pipeline中進(jìn)行實現(xiàn)亡问。示例代碼如下:

以上便是爬蟲部分的講解和示例代碼演示,當(dāng)然因為篇幅限制肛宋,無法把所有細(xì)節(jié)都介紹到位州藕,如果您對這個項目還有不懂的地方,我們在2月24日在網(wǎng)易云課堂會有直播悼吱,從零開始開始講解慎框,如何分析頁面,如何提取元素后添,scrapy框架是如何運行的等。有什么不懂的還可以和老師進(jìn)行互動薪丁,相信你一定可以學(xué)會的遇西!

四、網(wǎng)站實現(xiàn):

網(wǎng)站這里我們用的是Flask框架严嗜。在后臺做好數(shù)據(jù)的提取粱檀,在前端做好頁面的顯示。示例代碼如下:

做完后的效果圖如下(只是簡簡單單的做了個demo漫玄,UI還需要進(jìn)一步美化):

五茄蚯、總結(jié):

這個項目可以說是用到了Python大部分的技術(shù)要點压彭。有Python網(wǎng)絡(luò)爬蟲、Scrapy框架渗常、Python web開發(fā)壮不、Flask框架等。內(nèi)容比較豐富皱碘,知識點太多询一。無法通過一篇簡單的文章把所有技術(shù)細(xì)節(jié)都介紹到位。如果您對這個項目感興趣癌椿,并且想要進(jìn)一步學(xué)習(xí)健蕊,可以在2月24日晚8點,知了課堂和網(wǎng)易云課堂聯(lián)合舉辦了一場免費的直播盛宴踢俄,我將從零開始缩功,為您講述這個項目背后的一切技術(shù)要點,您將獲得以下收益:

1. Python實戰(zhàn)體驗都办;

2. 網(wǎng)絡(luò)爬蟲實戰(zhàn)技巧嫡锌;

3. 數(shù)據(jù)解析技術(shù)要點;

4. Python web開發(fā)技術(shù)流程脆丁;

5. Flask世舰、Django框架的使用;

6. 數(shù)據(jù)爬下來槽卫,如何產(chǎn)生價值跟压;

7. 用爬蟲和Flask/Django技術(shù)實現(xiàn)自己的電影網(wǎng)站;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歼培,一起剝皮案震驚了整個濱河市震蒋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躲庄,老刑警劉巖查剖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異噪窘,居然都是意外死亡笋庄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門倔监,熙熙樓的掌柜王于貴愁眉苦臉地迎上來直砂,“玉大人,你說我怎么就攤上這事浩习【苍荩” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵谱秽,是天一觀的道長洽蛀。 經(jīng)常有香客問我摹迷,道長,這世上最難降的妖魔是什么郊供? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任峡碉,我火速辦了婚禮,結(jié)果婚禮上颂碘,老公的妹妹穿的比我還像新娘异赫。我一直安慰自己,他們只是感情好头岔,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布塔拳。 她就那樣靜靜地躺著,像睡著了一般峡竣。 火紅的嫁衣襯著肌膚如雪靠抑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天适掰,我揣著相機(jī)與錄音颂碧,去河邊找鬼。 笑死类浪,一個胖子當(dāng)著我的面吹牛载城,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播费就,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼诉瓦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了力细?” 一聲冷哼從身側(cè)響起睬澡,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎眠蚂,沒想到半個月后煞聪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡逝慧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年昔脯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笛臣。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡栅干,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捐祠,到底是詐尸還是另有隱情,我是刑警寧澤桑李,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布踱蛀,位于F島的核電站窿给,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏率拒。R本人自食惡果不足惜崩泡,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猬膨。 院中可真熱鬧角撞,春花似錦、人聲如沸勃痴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沛申。三九已至劣领,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铁材,已是汗流浹背尖淘。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留著觉,地道東北人村生。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像饼丘,于是被迫代替她去往敵國和親趁桃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,441評論 6 428
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 2,961評論 1 3
  • (一) 就快要告別四年的大學(xué)校園葬毫,331宿舍里有種惴惴不安的離別焦躁镇辉,汽車工程系的幾個大老爺們連踢起足球來都沒有...
    0288fb0ad9b4閱讀 709評論 0 1
  • ■作業(yè)女排 課后習(xí)題:找到主人公的人設(shè) 請對照著這七大變量給你故事的主人公寫一篇人物小傳。 人物刻畫的七大變量 1...
    培根卷金針菇閱讀 160評論 0 0
  • 自動載入更新數(shù)據(jù)對用戶來說也很友好贴捡,這減少了用戶等待下載的時間忽肛。例如每次載入50條信息,那就可以在滾動到倒數(shù)第10...
    伏特加閱讀 204評論 0 2