详解Python爬取并下载《电影天堂》3千多部电影 不知不觉,玩爬虫玩了一个多月了。 我愈发觉得,爬虫其实并不是什么特别高深的技术,它的价值不在于你使用了什么特别牛的框架,用了多么了不起的技术,它不需要。它只是以一种自动化搜集数据的小工具,能够获取到想要的数据,就是它最大的价值。 我的爬虫课老师也常跟我们强调,学习爬虫最重要的,不是学习里面的技术,因为前端技术在不断的发展,爬虫的技术便会随着改变。学习爬虫最重要的是,学习它的原理,万变不离其宗。 爬虫说白了是为了解决需要,方便生活的。如果能够在日常生活中,想到并应用爬虫去解决实际的问题,那么爬虫的真正意义也久发挥出来了。 这是些闲话啦,有感而发而已。 最近有点片荒,不知道该看什么电影,而且有些电影在网上找好久也找不到资源。后来我了解到这个网站,发现最近好多不错的电影上面都有资源(这里我就先不管它的来源正不正规啦,#掩面)。 所以这次我们要爬取的网站是:《电影天堂》,屯一些电影,等无聊的时候拿出来看看,消遣消遣也是不错。 这次的网站,从爬虫的技术角度上来讲,难度不大,而且可以说是非常简单了。但是,它实用啊!你想嘛,早上上班前跑一下爬虫,晚上回家以后已经有几十部最新大片在你硬盘里等着你啦,累了一天躺床上看看电影,这种感觉是不是很爽啊。 而且正因为这个爬虫比较简单,所以我会写的稍微细一点,争取让 python 小白们也能尽可能看懂,并且能够在这个爬虫的基础上修改,得到爬取这个网站其他板块或者其他电影网站的爬虫。 写在前面的话 在编写爬虫程序之前,我先捋一捋我们的思路。 爬虫的原理,是通过给定的一个 URL(就是类似于 http://www.baidu.com 这样的,俗称网址的东东) 请求,去访问一个网页,获取那个网页上的源代码(不知道源代码的,随便打开一个网页,右键,查看网页源代码,出来的一大堆像乱码一样的东西就是网页源代码,我们需要的数据就藏在这些源代码里面)并返回来。 然后,通过一些手段(比如说json库,BeautifulSoup库,正则表达式等)从网页源代码中筛选出我们想要的数据(当然,前提是我们需要分析网页结构,知道自己想要什么数据,以及这些数据存放在网页的哪儿,存放的位置有什么特征等)。 最后,将我们获取到的数据按照一定的格式,存储到本地或者数据库中,这样就完成了爬虫的全部工作。 当然,也有一些 「骚操作」,如果你嫌爬虫效率低,可以开多线程(就是相当于几十只爬虫同时给你爬,效率直接翻了几十倍);如果担心爬取频率过高被网站封 IP,可以挂 IP 代理(相当于打几枪换个地方,对方网站就不知道你究竟是爬虫还是正常访问的用户了);如果对方网站有反爬机制,那么也有一些骚操作可以绕过反爬机制(有点黑客攻防的感觉,有木有!)。这些都是后话了。 爬虫部分 一、分析网站结构(以动作片电影为例) 1. 分析网页的 URL 的组成结构 首先,我们需要分析网页的 URL 的组成结构,主要关注两方面,一是如何切换选择的电影类型,二是网页如何翻页的。 点击网页上的电影类型的按钮,观察地址栏中的 URL ,发现网址和电影类型的关系如下: 电影类型 网址 剧情片 http://www.dy2018.com/0/ 喜剧片 http://www.dy2018.com/1/ 动作片 http://www.dy2018.com/2/ 爱情片 http://www.dy2018.com/3/ 科幻片 http://www.dy2018.com/4/ 动画片 http://www.dy2018.com/5/ 悬疑片 http://www.dy2018.com/6/ 惊悚片 http://www.dy2018.com/7/ 恐怖片 http://www.dy2018.com/8/ 记录片 http://www.dy2018.com/9/ ...... ...... 灾难片 http://www.dy2018.com/18/ 武侠片 http://www.dy2018.com/19/ 古装片 http://www.dy2018.com/20/ 发现规律了吧,以后如果想爬其他类型的电影,只要改变 url 中的数字即可,甚至你可以写一个循环,把所有板块中的电影全部爬取下来。 随便打开一个分类,我们滚动到页面的最下面,发现这里有翻页的按钮,点击按钮翻页的同时,观察 url 的变化。 页码 URL 第一页 http://www.dy2018.com/2/index.html 第二页 http://www.dy2018.com/2/index_2.html 第三页 http://www.dy2018.com/2/index_3.html 第四页 http://www.dy2018.com/2/index_4.html 除了第一页是 「index」外,其余页码均是 「index_页码」的形式。 所以我们基本掌握了网站的 url 的构成形式,这样我们就可以通过自己构造 url 来访问任意类型电影的任意一页了,是不是很酷。 2. 分析网站的页面结构 其次,我们分析一下网站的页面结构,看一看我们需要的信息都藏在网页的什么地方(在这之前我们先要明确一下我们需要哪些数据),由于我们这个目的是下载电影,所以对我有用的数据只有两个,电影名称和下载电影的磁力链接。 按 F12 召唤出开发者工具(这个工具可以帮助你快速定位网页中的元素在 html 源代码中位置)。 然后,我们可以发现,电影列表中,每一部电影的信息存放在一个