当前位置: 首页 > news >正文

寒假学习笔记2.15

一、学习目标
掌握使用Docker容器化爬虫项目及其依赖环境

学习使用Scrapyd部署和管理Scrapy爬虫

了解Gerapy作为Scrapyd的图形化管理工具

能够配置定时任务(cron / APScheduler)自动运行爬虫

熟悉爬虫日志管理与简单监控

构建一个可部署、可调度、可监控的爬虫系统

二、学习内容

  1. Docker容器化爬虫
    Docker可以将爬虫及其依赖打包成镜像,保证环境一致性,便于部署和扩展。

1.1 编写Dockerfile
以豆瓣电影爬虫为例,创建Dockerfile:

dockerfile

基础镜像

FROM python:3.9-slim

设置工作目录

WORKDIR /app

安装系统依赖(如有需要)

RUN apt-get update && apt-get install -y --no-install-recommends
gcc
&& rm -rf /var/lib/apt/lists/*

复制依赖文件

COPY requirements.txt .

安装Python依赖

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

复制项目代码

COPY . .

默认命令(可以被覆盖)

CMD ["scrapy", "crawl", "douban"]
1.2 构建与运行
bash

构建镜像

docker build -t douban-spider .

运行容器

docker run --rm douban-spider

如果需要传入参数,可以覆盖CMD

docker run --rm douban-spider scrapy crawl douban -o /data/output.json
1.3 使用docker-compose编排多服务
如果爬虫依赖数据库(如MySQL、Redis),可以使用docker-compose:

yaml
version: '3'
services:
redis:
image: redis:alpine
ports:
- "6379:6379"
spider:
build: .
depends_on:
- redis
environment:
- REDIS_HOST=redis
command: scrapy crawl douban_redis
2. Scrapyd部署爬虫
Scrapyd是一个部署和运行Scrapy爬虫的服务,提供HTTP API。

2.1 安装与启动Scrapyd
bash
pip install scrapyd
scrapyd # 启动服务,默认监听6800端口
2.2 部署爬虫到Scrapyd
在爬虫项目目录下创建setup.py(如果还没有):

python
from setuptools import setup, find_packages

setup(
name='douban_spider',
version='1.0',
packages=find_packages(),
entry_points={'scrapy': ['settings = douban.settings']},
)
使用scrapyd-deploy工具部署(需要安装scrapyd-client):

bash
pip install scrapyd-client
scrapyd-deploy target -p project_name
其中target在scrapy.cfg中定义:

ini
[deploy]
url = http://localhost:6800/
project = douban
2.3 通过API控制爬虫
列出项目:curl http://localhost:6800/listprojects.json

列出爬虫:curl http://localhost:6800/listspiders.json?project=douban

启动爬虫:curl http://localhost:6800/schedule.json -d project=douban -d spider=douban

取消任务:curl http://localhost:6800/cancel.json -d project=douban -d job=xxxxx

  1. Gerapy可视化管理
    Gerapy是基于Scrapyd的图形化管理工具,可以方便地管理多台Scrapyd服务器和爬虫。

3.1 安装与初始化
bash
pip install gerapy
gerapy init # 创建gerapy项目目录
cd gerapy
gerapy migrate # 初始化数据库
gerapy runserver 0.0.0.0:8000 # 启动服务
3.2 配置与使用
在Web界面中添加Scrapyd服务器(主机、端口)

上传爬虫项目(打包为egg文件)

通过界面调度爬虫、查看任务状态

  1. 定时任务调度
    4.1 使用系统cron(Linux)
    编辑crontab:crontab -e

text
0 2 * * * cd /path/to/project && scrapy crawl douban >> /var/log/spider.log 2>&1
4.2 使用APScheduler(Python调度库)
可以编写一个调度脚本,与Scrapyd API结合:

python
from apscheduler.schedulers.blocking import BlockingScheduler
import requests

def job():
requests.post('http://localhost:6800/schedule.json',
data={'project': 'douban', 'spider': 'douban'})

scheduler = BlockingScheduler()
scheduler.add_job(job, 'cron', hour=2, minute=0)
scheduler.start()
4.3 使用Airflow(适合复杂工作流)
Airflow是更强大的工作流调度平台,但学习成本较高,可作为扩展了解。

  1. 日志与监控
    5.1 日志管理
    Scrapy默认将日志输出到终端,可以配置LOG_FILE将日志写入文件。

使用logging模块自定义日志格式和处理器。

使用ELK(Elasticsearch, Logstash, Kibana)或Splunk集中管理日志。

5.2 简单监控
监控Scrapyd的任务状态:定期调用API检查任务完成情况。

使用Prometheus + Grafana监控爬虫运行指标(如抓取速率、错误数)。

设置告警:当任务失败或长时间未完成时发送邮件或钉钉通知。

http://www.jsqmd.com/news/399389/

相关文章:

  • 题解:AcWing 866 试除法判定质数
  • 实验室里的干涉仪总在搞事情,拍出来的条纹图总像抽象派画作。今天咱们用MATLAB给这些条纹来点硬核处理,手把手整点相位计算、解包裹这些骚操作
  • 寒假学习笔记2.14
  • 淘票票9.5+猫眼9.4+票房破5亿,《惊蛰无声》凭什么让观众打出高分? - SFMEDIA
  • 基于java的设计师约稿平台
  • 从 std 到 STL:C++ 标准库到底是什么?(附 Java 类比)
  • 题解:AcWing 861 二分图的最大匹配
  • 解密AI原生应用领域意图识别的工作原理
  • 基于java和Vue的共享单车管理系统 骑行记录 单车监督调度系统
  • 《惊蛰无声》淘票票开分9.5、猫眼9.4,票房破5亿:口碑与市场双向奔赴 - SFMEDIA
  • 基于java的蛋糕烘焙方法经验分享平台
  • 元数据管理如何提升数据科学团队效率?
  • java软件测试项目任务管理系统
  • 数据运营新人必学:从Excel到SQL到BI,大数据工具学习的3个阶段及避坑点
  • 题解:AcWing 860 染色法判定二分图
  • 寒假学习笔记2.13
  • 基于java+Vue的养老院服务预订管理系统的设计与实现
  • 光子晶体仿真在COMSOL里总能把人折腾得又爱又恨。今天聊聊几个实战中容易卡壳的点:拓扑荷对偏振态的操控、三维能带与Q因子计算,顺带提一嘴远场偏振的骚操作
  • java电影评论情感分析系统78j90381
  • java第二课堂教学管理系统 j6l4ub2t
  • java基于数据可视化的大学生创新能力培养平台
  • java校园二手交易平台
  • 股市赚钱学概论:赚钱理之其他
  • SVPWM+死区补偿(基于电流极性)+高频注入法辨识PMSM的dq轴电感(离线辨识) 1.模型...
  • 47款U盘
  • JAVA面试题速记-第1期-java基础
  • 屏幕注释工具DrawPen
  • NanaZip
  • 题解:AcWing 854 Floyd求最短路
  • TVP-FAVAR模型解读