用爬虫和Flask打造属于自己的电影网站,完整教程送上!

也许你曾经为了一部电影找遍全网却没发现任何有用的资源,也许你曾经被披着电影外衣的网站忽悠进去而染上木马病毒。一部小小的电影搞得你心力交瘁,怀疑人生。不过,作为一名合格的程序员,一向以write the code,change the world所著称,我们写的代码都能改变世界,岂能被这种小事情所屈服?不是不干,要干就干一票大的!这一次,我们祭上万能的Python语言,用爬虫技术加上Flask框架,打造一个属于自己的电影网站!界面清爽无木马,PC手机随心看!今年告别单身,征服女神的任务,就从这里开始啦~

一、准备工作

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技术实现自己的电影网站;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,426评论 6 428
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,948评论 1 3
  • (一) 就快要告别四年的大学校园,331宿舍里有种惴惴不安的离别焦躁,汽车工程系的几个大老爷们连踢起足球来都没有...
    0288fb0ad9b4阅读 704评论 0 1
  • ■作业女排 课后习题:找到主人公的人设 请对照着这七大变量给你故事的主人公写一篇人物小传。 人物刻画的七大变量 1...
    培根卷金针菇阅读 158评论 0 0
  • 自动载入更新数据对用户来说也很友好,这减少了用户等待下载的时间。例如每次载入50条信息,那就可以在滚动到倒数第10...
    伏特加阅读 202评论 0 2