一、爬取目标
本次爬取的站点选择电影天堂,网址是:。爬取内容是整个站点的所有电影信息,包括电影名称,导演、主演、下载地址等。具体抓取信息如下图所示:
2.1确定爬取入口
2.2爬取思路
知道爬取入口,后面的工作就容易多了。我通过测试发现这几个栏目除了页面的url地址不一样之外,其他例如提取信息的xpath路径是一样的。因此,我把5个栏目当做1个类,再该类进行遍历爬取。
我这里“最新电影”为例说明爬取思路。
2)将获取到的分页url存放到名为floorQueue队列中;
3)从floorQueue中依次取出分页url,然后利用多线程发起请求;
4)将获取到的电影页面url存入到名为middleQueue的队列;
5)从middleQueue中依次取出电影页面url,再利用多线程发起请求;
6)将请求结果使用Xpath解析并提取所需的电影信息;
7)将爬取到的电影信息存到名为contentQueue队列中;
8)从contentQueue队列中依次取出电影信息,然后存到数据库中。
2.3设计爬虫架构
根据爬取思路,我设计出爬虫架构。如下图所示:
2.4代码实现
主要阐述几个重要的类的代码
main类
主要工作两个:第一,实例化出一个dytt8Moive对象,然后开始爬取信息。第二,等爬取结束,将数据插入到数据库中。
处理爬虫的逻辑代码如下:
创建数据库以及表,接着再把电影信息插入到数据库的代码如下:
TaskQueue类
维护floorQueue、middleQueue、contentQueue三个队列的管理类。之所以选择队列的数据结构,是因为爬虫程序需要用到多线程,队列能够保证线程安全。
dytt8Moive类
dytt8Moive类是本程序的主心骨。程序最初的爬取目标是5个电影栏目,但是目前只现实了爬取最新栏目。如果你想爬取全部栏目电影,只需对dytt8Moive稍微改造下即可。
getMoiveInforms方法是主要负责解析电影信息节点并将其封装成字典。在代码中,你看到Xpath的路径表达式不止一条。因为电影天堂的电影详情页面的排版参差不齐,所以单单一条内容提取表达式、海报和影片截图表达式、下载地址表达式远远无法满足。
选择字典类型作为存储电影信息的数据结构,也是自己爬坑之后才决定的。这算是该站点另一个坑人的地方。电影详情页中有些内容节点是没有,例如类型、豆瓣评分,所以无法使用列表按顺序保存。
2
爬取结果
我这里展示自己爬取最新栏目中4000多条数据中前面部分数据。
附:源代码地址()
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。