① 爬虫实战二:爬取电影天堂的最新电影
前两篇文章讲述了 requests 和 xpath 的使用方法。为了实践所学,本文将介绍如何使用这两个工具进行实战。
1 爬取目标
本次目标为爬取电影天堂(网址:ydtt8.net)站点的所有电影信息,包括电影名称、导演、主演、下载地址等。具体抓取信息如图所示:
2 设计爬虫程序
2.1 确定爬取入口
电影天堂电影种类繁多,数量庞大,为了确保爬取的电影信息不重复,我们需要确定一个爬取方向。点击主页中的【最新电影】选项后,我们会进入一个新页面,这时会有一种豁然开朗的感觉。
如图所示,电影天堂有5个电影栏目,分别为最新电影、日韩电影、欧美电影、国内电影、综合电影。每个栏目都有一定数量的分页,每个分页包含25条电影信息。因此,程序的入口可以有5个URL地址,分别对应每个栏目的首页链接。
2.2 爬取思路
了解爬取入口后,后续工作就变得容易了。通过测试,我发现这几个栏目除了页面的URL地址不同之外,其他如提取信息的xpath路径是一样的。因此,我将5个栏目视为一个类,并进行遍历爬取。
以“最新电影”为例,说明爬取思路:1)请求栏目的首页,获取分页总数和每个分页的URL地址;2)将获取到的分页URL存放到名为floorQueue的队列中;3)依次从floorQueue中取出分页URL,利用多线程发起请求;4)将获取到的电影页面URL存入名为middleQueue的队列;5)依次从middleQueue中取出电影页面URL,再利用多线程发起请求;6)使用xpath解析请求结果并提取所需的电影信息;7)将爬取到的电影信息存到名为contentQueue的队列中;8)依次从contentQueue中取出电影信息,然后存入数据库中。
2.3 设计爬虫架构
根据爬取思路,我设计出爬虫架构,如图所示:
2.4 代码实现
主要阐述几个重要的类的代码。主要工作有两个:第一,实例化一个dytt8Movie对象,然后开始爬取信息。第二,等爬取结束,将数据插入到数据库中。
处理爬虫的逻辑代码如下:
创建数据库以及表,再将电影信息插入到数据库的代码如下:
维护floorQueue、middleQueue、contentQueue三个队列的管理类。选择队列的数据结构是因为爬虫程序需要用到多线程,队列能够保证线程安全。
dytt8Movie类是本程序的主心骨。程序最初的爬取目标是5个电影栏目,但目前只实现了爬取最新栏目。如果你想爬取全部栏目电影,只需对dytt8Movie稍作修改即可。
getMovieInformations方法主要负责解析电影信息节点并将其封装成字典。因为电影天堂的电影详情页面排版参差不齐,所以单单一条内容提取表达式、海报和影片截图表达式、下载地址表达式远远无法满足。
选择字典类型作为存储电影信息的数据结构,是在爬坑之后决定的。这也是该站点另一个坑人的地方。电影详情页中有些内容节点是没有的,例如类型、豆瓣评分,所以无法使用列表按顺序保存。
3 爬取结果
这里展示了自己爬取最新栏目中4000多条数据的前部分数据。
最后附上源代码,下载地址:源代码地址
② 电影天堂怎么使手机看电影啊
想要使用手机观看电影《天堂》,可以在手机里下载一个优酷APP进行观看,使用优酷观看电影《天堂》的步骤如下:
1、首先在手机主页找到已经下载好的优酷APP标识