用爬蟲和Flask打造屬於自己的電影網站,完整教程送上!
一、準備工作
1. 首先你要一個Python解釋器。在目前為止,Python存在兩大主流的版本,一個是Python2.7,一個是Python3.6。Python2.x歷史悠久,支持的庫多,但是畢竟是老版本,一些歷史遺留的問題未能得到解決,比如編碼問題,一些內置函數的執行性能等。而Python3優化了Python2中的很多底層代碼,並且默認的字符串就是unicode類型,無需擔心編碼問題,很多函數因為使用了生成器而大大的提高了代碼的執行效率。但是Python3因為比較新,所以一些第三方庫還來不及支持Python3(比如進程管理工具supervisor就還未支持Python3),但是慢慢的都在支持Python3了,並且Python3也是未來的一個趨勢,Python2已經被官方宣布在2020年將全面停止更新。所以現在學Python,首選Python3。因此我們本個課程,也用Python3來講解。如果您還沒有安裝Python3,可以到官網:https://www.python.org,根據自己的操作系統,選擇相應的版本下載。安裝過程非常簡單,一頓下一步就可以啦,但是為了不必要的麻煩,給個小提示,千萬不要放在有中文的路徑下面哦~
2. 安裝完Python以後,如果不出意外,應該是已經安裝了pip。通過pip可以非常方便的管理Python第三方包。可以在CMD或者任何shell終端輸入pip -V,如果提示了找不到pip命令,說明pip沒有安裝成功。那麽可以通過easy_install install pip來進行安裝。
3. requests庫。這個庫是專門用來做網絡請求的。他比Python自帶的urllib庫好用很多,在urllib3的基礎之上做了進一步的封裝,讓我們寫網絡請求的時候不要處理一些類似於url編碼等相關的無意義的事情。他的slogan是Http for Humans,意思是對人友好的Http請求庫,可以說是非常的形象了。這個庫不是Python內置的,因此需要通過pip進行安裝。安裝方式也是非常簡單,只要進入cmd或者shell終端,輸入pip install requests即可安裝。
4. Scrapy框架。最強大的爬蟲框架,沒有之一!註意,他不是一個簡簡單單的庫,而是一個框架。實現了從url匹配,到數據下載,數據解析,數據存儲等一套完整的組件。讓你寫爬蟲更加輕松,更加健壯,更加高效。我們也是用這個框架來幫我們處理爬蟲,這樣我們可以不間斷的批量的爬取電影信息,然後存儲到數據庫中。Scrapy也不是Python內置的,需要通過pip install scrapy安裝。
5. MySQL服務器。數據爬取下來後,要存儲起來,以後才能通過網頁的形式展現出來。存儲數據的方式有很多,比如可以存儲到JSON文件中、MySQL數據庫中、SQLite數據庫等。而MySQL由於性能高、成本低、可靠性好,已經成為最流行的開源數據庫,已經被廣泛的應用在了大中小型網站中。我們的數據從網站上爬取下來後,以後還需要用在網站中展示。因此我們采用MySQL來存儲數據。MySQL安裝非常簡單,可以到MySQL官網下載安裝即可:https://dev.mysql.com/downloads/windows/installer/5.7.html。
6. Django框架。Django框架是Python web開發中一款非常主流的框架。上手快,功能齊全,可以勝任大型網站的任務。他也是集HTTP協議、URL匹配、數據庫管理、HTML模版渲染等於一體的框架。數據已經從爬到數據庫中了,下一步我們就是使用Django框架實現一個網站,動態的加載數據!根據自己的需求,想做成什麽樣就做成什麽樣!Django也是第三方的,需要通過pip install django進行安裝。
二、項目架構:
在寫具體的代碼之前,先來理順一下整個項目框架的結構。爬蟲負責抓取網站的數據,並對抓取下來的數據進行解析和清洗,然後存儲到數據庫中。之後Django再從數據庫中讀取數據,並將讀取的數據顯示在網頁中。結構圖如下:
三、爬蟲實現:
俗話說,巧婦難為無米之炊,再牛逼的爬蟲程序如果沒有好的數據來源,也爬不到有價值的數據。因此選擇一個好的資源網站至關重要。這裏我們選擇的是電影天堂和陽光電影兩個特別良心的網站。這兩個網站上有大量的高清視頻資源,每部電影都配有詳細的信息,包括演員,導演,年代,類型,豆瓣評分,視頻截圖等,最重要的是附有迅雷下載鏈接,可以說是非常良心了。但是這個網站經常會有一些廣告(廣告是主要的主要的收入來源),當你在點擊某個鏈接的時候,會首先給你彈出一個新頁面,裏面嵌入的就是廣告資源,然後你再次點擊,才能進入到下一個頁面。並且有時候這個網站還會被Chrome瀏覽器識別為病毒網站(不知是否真的有病毒),導致無法正常訪問。另外最後一個就是,這個網站的界面相當不美觀,對於我這種審美要求高的(特別是美女(*^_^*))碼農來說,實在不能忍受。因此如果我們能把上面的電影資源都爬下來,再按照自己的需求實現一個網站,顯示這些信息,那就很有意思了。無論從個人角度還是商業角度來說,都是非常有價值的!這裏我們使用的是Scrapy框架來實現的,那麽以下主要從數據抓取,數據解析和數據存儲三個角度來進行分析:
1. 數據抓取和解析:在寫代碼之前,我們首先來分析下電影天堂這個網站,他的首頁是包含了各種類型資源的一個組合。我們現在要爬取的是電影信息,因此點擊“更多最新電影”跳轉到最新電影的列表頁面,如下圖:
可以看到這個列表頁包含了許多我們想要的電影資源,但是我們現在爬,只能爬取到這一頁的電影信息,怎麽能把其他頁面的電影也爬下來呢,這時候就要找到每個頁面的url規則了。我們可以看到,第一頁電影的URL是:http://www.dytt8.net/html/gndy/dyzz/list_23_1.html,第二頁電影的URL是:http://www.dytt8.net/html/gndy/dyzz/list_23_2.html。所以我們得出一個結論就是,URL的前面部分都是一樣的,最後那個數字是幾,代表的是第幾頁。接下來就是去爬詳情頁面了。詳情頁的例圖如下:
包括電影的信息、海報,都能在這個裏面找到。那麽數據爬取的代碼如下:
2.數據存儲:這裏我們把爬取下來的數據存儲到MySQL數據庫中。需要在pipeline中進行實現。示例代碼如下:
以上便是爬蟲部分的講解和示例代碼演示,當然因為篇幅限制,無法把所有細節都介紹到位,如果您對這個項目還有不懂的地方,我們在2月24日在網易雲課堂會有直播,從零開始開始講解,如何分析頁面,如何提取元素,scrapy框架是如何運行的等。有什麽不懂的還可以和老師進行互動,相信你一定可以學會的!
四、網站實現:
網站這裏我們用的是Flask框架。在後臺做好數據的提取,在前端做好頁面的顯示。示例代碼如下:
做完後的效果圖如下(只是簡簡單單的做了個demo,UI還需要進一步美化):
五、總結:
這個項目可以說是用到了Python大部分的技術要點。有Python網絡爬蟲、Scrapy框架、Python web開發、Flask框架等。內容比較豐富,知識點太多。無法通過一篇簡單的文章把所有技術細節都介紹到位。如果您對這個項目感興趣,並且想要進一步學習,可以在2月24日晚8點,知了課堂和網易雲課堂聯合舉辦了一場免費的直播盛宴,我將從零開始,為您講述這個項目背後的一切技術要點,您將獲得以下收益:
1. Python實戰體驗;
2. 網絡爬蟲實戰技巧;
3. 數據解析技術要點;
4. Python web開發技術流程;
5. Flask、Django框架的使用;
6. 數據爬下來,如何產生價值;
7. 用爬蟲和Flask/Django技術實現自己的電影網站;
用爬蟲和Flask打造屬於自己的電影網站,完整教程送上!