Docker部署Scrapy项目详细教程

概述

Scrapy是一个用于爬取网页数据的Python框架,可以高效地处理大规模数据的爬取任务。而Docker是一个用于快速构建、部署和运行应用程序的开源平台。本教程将介绍如何使用Docker来部署Scrapy项目。

准备工作

在开始之前,我们需要先安装好Docker和Scrapy。请根据官方文档或其他教程进行安装。

编写Scrapy项目

首先,我们需要编写一个Scrapy项目。在本教程中,我们以爬取豆瓣电影Top250为例。

创建Scrapy项目

打开命令行终端,使用以下命令创建一个新的Scrapy项目:

$ scrapy startproject douban_movie

这将创建一个名为"douban_movie"的目录,并在其中包含一些初始文件。

编写爬虫

进入"douban_movie"目录,创建一个新的爬虫:

$ cd douban_movie
$ scrapy genspider douban_spider movie.douban.com

这将创建一个名为"douban_spider"的爬虫文件,并指定要爬取的初始URL为豆瓣电影网站。

打开"douban_spider.py"文件,编写爬虫逻辑。以下是一个简单的示例:

import scrapy

class DoubanSpider(scrapy.Spider):
    name = "douban"
    start_urls = [
        '
    ]

    def parse(self, response):
        for movie in response.css('.item'):
            yield {
                'title': movie.css('.title::text').get(),
                'rating': movie.css('.rating_num::text').get(),
                'quote': movie.css('.quote span::text').get(),
            }

        next_page = response.css('.next a::attr(href)').get()
        if next_page is not None:
            yield response.follow(next_page, self.parse)

这个爬虫将从豆瓣电影Top250页面中提取电影的标题、评分和引用,并通过yield语句逐一返回。

编写Dockerfile

在项目根目录下创建一个名为"Dockerfile"的文件,用于构建Docker镜像。

FROM python:3.9

WORKDIR /app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD scrapy crawl douban

这个Dockerfile指定了使用Python 3.9作为基础镜像,并将当前目录下的代码复制到容器的"/app"目录中。然后,安装所需的Python依赖,并在容器启动时执行"scrapy crawl douban"命令。

编写requirements.txt

在项目根目录下创建一个名为"requirements.txt"的文件,用于指定所需的Python依赖包。

scrapy

这个文件只包含一个依赖项,即Scrapy。

构建Docker镜像

在完成上述步骤后,我们可以开始构建Docker镜像了。

打开命令行终端,进入项目根目录,执行以下命令:

$ docker build -t scrapy-douban .

这将根据Dockerfile中的指令构建一个名为"scrapy-douban"的镜像。

运行Docker容器

构建完成后,我们可以通过运行Docker容器来启动Scrapy爬虫。

执行以下命令:

$ docker run -it --rm scrapy-douban

这将启动一个新的Docker容器,并在其中运行Scrapy爬虫。

查看结果

在运行容器的过程中,我们可以在命令行终端中看到爬取结果的输出。当爬取完成后,容器将自动终止。

为了保存爬取结果,我们可以将容器内的数据挂载到主机上的一个目录。执行以下命令来运行容器,并将结果保存到当前目录下的"output.json"文件中:

$ docker run -it --rm -v $(pwd):/app scrapy-douban scrapy crawl douban -o output.json