快捷搜索:  汽车  科技

爬虫获取豆瓣电影超链接:电影天堂的最新电影爬取

爬虫获取豆瓣电影超链接:电影天堂的最新电影爬取2.1 确定爬取入口本次爬取的站点选择电影天堂,网址是: dytt8。爬取内容是整个站点的所有电影信息,包括电影名称,导演、主演、下载地址等。具体抓取信息如下图所示:设计爬虫架构代码实现三、爬取结果

一、爬取目标

二、设计爬虫程序

  • 确定爬取入口

  • 爬取思路

  • 设计爬虫架构

  • 代码实现

三、爬取结果

一、爬取目标

本次爬取的站点选择电影天堂,网址是: dytt8。爬取内容是整个站点的所有电影信息,包括电影名称,导演、主演、下载地址等。具体抓取信息如下图所示:

爬虫获取豆瓣电影超链接:电影天堂的最新电影爬取(1)

二、设计爬虫程序

2.1 确定爬取入口

电影天堂里面的电影数目成千上万,电影类型也是让人眼花缭乱。我们为了保证爬取的电影信息不重复, 所以要确定一个爬取方向。目前这情况真让人无从下手。但是,我们点击主页中的【最新电影】选项,跳进一个新的页面。蓦然有种柳暗花明又一村的感觉。

由图可知道,电影天堂有 5 个电影栏目,分别为最新电影、日韩电影、欧美电影、国内电影、综合电影。每个栏目又有一定数量的分页,每个分页有 25 条电影信息。那么程序的入口可以有 5 个 url 地址。这 5 个地址分别对应每个栏目的首页链接。

2.2 爬取思路

知道爬取入口,后面的工作就容易多了。我通过测试发现这几个栏目除了页面的 url 地址不一样之外,其他例如提取信息的 xpath 路径是一样的。因此,我把 5 个栏目当做 1 个类,再该类进行遍历爬取。

我这里“最新电影”为例说明爬取思路。

1)请求栏目的首页来获取到分页的总数,以及推测出每个分页的 url 地址;

2)将获取到的分页 url 存放到名为 floorQueue 队列中;

3)从 floorQueue 中依次取出分页 url,然后利用多线程发起请求;

4)将获取到的电影页面 url 存入到名为 middleQueue 的队列;

5)从 middleQueue 中依次取出电影页面 url,再利用多线程发起请求;

6)将请求结果使用 Xpath 解析并提取所需的电影信息;

7)将爬取到的电影信息存到名为 contentQueue 队列中;

8)从 contentQueue 队列中依次取出电影信息,然后存到数据库中。

2.3 设计爬虫架构

根据爬取思路,我设计出爬虫架构。如下图所示:

爬虫获取豆瓣电影超链接:电影天堂的最新电影爬取(2)

2.4 代码实现

主要阐述几个重要的类的代码

  • main 类

主要工作两个:第一,实例化出一个dytt8Moive对象,然后开始爬取信息。第二,等爬取结束,将数据插入到数据库中。

处理爬虫的逻辑代码如下:

爬虫获取豆瓣电影超链接:电影天堂的最新电影爬取(3)

创建数据库以及表,接着再把电影信息插入到数据库的代码如下:

爬虫获取豆瓣电影超链接:电影天堂的最新电影爬取(4)

  • TaskQueue 类

维护 floorQueue、middleQueue、contentQueue 三个队列的管理类。之所以选择队列的数据结构,是因为爬虫程序需要用到多线程,队列能够保证线程安全。

  • dytt8Moive 类

dytt8Moive 类是本程序的主心骨。程序最初的爬取目标是 5 个电影栏目,但是目前只现实了爬取最新栏目。如果你想爬取全部栏目电影,只需对 dytt8Moive 稍微改造下即可。

爬虫获取豆瓣电影超链接:电影天堂的最新电影爬取(5)

getMoiveInforms 方法是主要负责解析电影信息节点并将其封装成字典。在代码中,你看到 Xpath 的路径表达式不止一条。因为电影天堂的电影详情页面的排版参差不齐,所以单单一条内容提取表达式、海报和影片截图表达式、下载地址表达式远远无法满足。

选择字典类型作为存储电影信息的数据结构,也是自己爬坑之后才决定的。这算是该站点另一个坑人的地方。电影详情页中有些内容节点是没有,例如类型、豆瓣评分,所以无法使用列表按顺序保存。

2

爬取结果

我这里展示自己爬取最新栏目中 4000 多条数据中前面部分数据。

爬虫获取豆瓣电影超链接:电影天堂的最新电影爬取(6)

附:源代码地址(github/wzjgn/MoivesSpider)

爬虫获取豆瓣电影超链接:电影天堂的最新电影爬取(7)

猜您喜欢: