crawlab通过docker单节点部署简单爬虫

crawlab

单节点docker安装

此处介绍的是单节点的方式,多节点的情况可以把爬虫上传到一个节点中,之后会同步到其它节点上

version: '3.3'
services:
  master:
    image: crawlabteam/crawlab
    container_name: crawlab_master
    restart: always
    environment:
      CRAWLAB_NODE_MASTER: Y  # Y: 主节点
      CRAWLAB_MONGO_HOST: mongo  # mongo host address. 在 Docker-Compose 网络中,直接引用 service 名称
      CRAWLAB_MONGO_PORT: 27017  # mongo port 
      CRAWLAB_MONGO_DB: crawlab  # mongo database 
      CRAWLAB_MONGO_USERNAME: username  # mongo username
      CRAWLAB_MONGO_PASSWORD: password  # mongo password 
      CRAWLAB_MONGO_AUTHSOURCE: admin  # mongo auth source 
    volumes:
      - "./master:/data"  # 持久化 crawlab 数据,master是win中的相对目录
    ports:
      - "8080:8080"  # 开放 api 端口
    depends_on:
      - mongo

  mongo:
    image: mongo:4.2
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: username  # mongo username
      MONGO_INITDB_ROOT_PASSWORD: password  # mongo password
    volumes:
      - "/opt/crawlab/mongo/data/db:/data/db"  # 持久化 mongo 数据
    ports:
      - "27017:27017"  # 开放 mongo 端口到宿主机

docker-compose up -d运行,访问localhost:8080,用户密码均为admin

上传爬虫

此处上传一个爬取图片的简单爬虫,上传requirements.txt或者package.json文件,crawlab会自动扫描并安装依赖,但是如果存在多版本依赖的话,还没尝试,希望大神知道的留言告知。
爬虫是一个下载美女图片的爬虫,进入到crawlab的终端中,执行pip3 list 可以看到安装的包,其中常见的如requests、parsel都已经安装了

// ceshi.py
import requests
import parsel
import os
os.mkdir('/data/aa')
for page in range(1, 2):
    print(f'-------正在爬取第{page}页----------')
    sub_url = ''if page == 1 else '_' + str(page)
    url = f'https://pic.netbian.com/4kmeinv/index{sub_url}.html'
    if not os.path.exists('/data/aa/' + f'第{page}页'):
        os.mkdir('/data/aa/' + f'第{page}页')
    response = requests.get(url=url)
    response.encoding = 'gbk'

    data_html = response.text
    selector = parsel.Selector(data_html)
    a_href_list = selector.css(
        '#main > div.slist > ul > li > a::attr(href)').getall()  # 获取每个图片的url
    for a_href in a_href_list:
        a_href = 'https://pic.netbian.com' + a_href
        response_1 = requests.get(a_href)
        selector_1 = parsel.Selector(response_1.text)  # 每个图片的网页链接
        img = selector_1.css('#main > div > div > div > a > img::attr(src)').getall()[
            0]  # 照片的url
        download_url = 'https://pic.netbian.com/' + img
        title = img.split('/')[-1]
        download = requests.get(download_url).content

        with open(f'/data/aa/第{page}页/{title}', mode='wb')as f:
            f.write(download)
        print(title, '下载完成')
    print(f'第{page}页全部下载完成')

图片下载到data目录下,而data又通过docker映射到了本机的master目录中
填写如下
crawlab通过docker单节点部署简单爬虫_第1张图片

总结

简单的用了下,感觉crawlab很好用,能把多个爬虫方便的管理起来,还有cron的功能,当作脚本管理也很不错

你可能感兴趣的:(环境搭建,docker,爬虫)