后端研发转型爬虫实战:Scrapy 二开爬虫框架的避坑指南

一、前言

近期业务爬虫需求激增,现有爬虫团队资源紧张,需要后端研发同学协同支持。本文基于公司内部基于Scrapy二次开发的爬虫框架(Speedy)实战经验,分享爬虫项目中的核心开发模式、常见问题解决思路和实用技巧。

无论你是临时支援的后端研发,还是对爬虫技术感兴趣的同学,这些实战经验都能帮助你快速理解爬虫开发的关键要点,提高开发效率。

二、项目架构说明

爬虫项目架构使用 Speedy,项目名称自定义。

2.1 Speedy 爬虫框架

项目框架 Speedy 是基于 Scrapy 进行二开的爬虫框架。非开源且不对外开放的,没有官方网站。资料可以通过 Scrapy 间接学习。
在这里插入图片描述

2.1.1 Scrapy 网络爬虫框架

Scrapy 中文文档
Scrapy是一个快速、高效率的网络爬虫框架,用于抓取web站点并从页面中提取结构化的数据。 Scrapy被广泛用于数据挖掘、监测和自动化测试

2.1.2 生产者-消费者模式

(1)Speedy 框架采用生产者-消费者模式
生产者发送消息到 redis 中,消费者监听消费。增加失败重试兼容网络波动等场景;
使用 ack 机制避免丢失消息;
重试后仍失败的消息会放到 dlq 队列中,通过监控告警通知到研发负责人,人工处理。

2.1.3 消息消费过程说明

(1)调度平台 rundeck 触发定时任务,调用生产者添加爬虫任务体消息到 redis
在这里插入图片描述
在这里插入图片描述

(2)消费者监听 redis 中的消息,spider 进行消费
(3)spider 爬虫程序执行发出请求 request,接收响应 parse,存储响应结果
在这里插入图片描述

2.2 项目结构

● conf : 包含项目的配置文件,如基础配置、报警机器人配置、数据库会话配置、MySQL配置、Redis配置和任务队列工具配置。
● monitor_client : 监控客户端,包含监控指标、Redis字典和相关值的配置文件。
● scheduler : 调度器模块,包含后端实现、处理逻辑、监控、任务队列管理、令牌桶算法和工具函数。
● sites : 各个站点的具体实现,每个站点包含初始化文件、items定义、jobs脚本、中间件、管道、设置、爬虫、任务队列和工具函数。
● speedy_settings : speedy配置。
● third_party : 第三方库或工具。
● utils : 工具模块。

2.2.1 Redis 配置

● 文件路径:conf/redis.py

CONNECTION = {
   
   
    'host': '127.0.0.1',
    'port': 6379,
    'db': 2,
    'password': ''
}

2.2.2 MySQL 配置

● 文件路径:conf/mysql.py
定义多数据源 mysql_crawL_db、mysql_service_data

import platform

system = platform.system()


def create_mysql_config(host=None, port=None, user=None, password=None):
    return {
   
   
        'type': 'mysql',
        'conf': {
   
   
            'host': host,
            'port': port,
            'user': user,
            'password': password,
            'max_op_fail_retry': 3,
            'timeout': 60
        }
    }


mysql_crawL_db = create_mysql_config(
    host='192.168.8.101', port=3306, user='root', password='root'
)
mysql_service_data = create_mysql_config(
    host='192.168.8.102', port=3306, user='root', password='root'
)

2.3 python 和 nodejs 版本要求

(1)建议安装 Anaconda,可以管理多版本 python 环境

  • python --version
    Python 3.7.1
  • node -v
    v20.19.3

(2)然后拉取项目到本地,执行命令拉取所有依赖

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

三、爬虫实现

3.1 需求表结构设计

(1)此处以抓取罗盘达人今日直播间信息为例。
今日直播卡片数据请求 base_url 为https://compass.jinritemai.com/compass_api/author/live/live_detail/today_live_room?
在这里插入图片描述

(2)响应 json 结果如下

{
   
   
    "data": {
   
   
        "card_list": [
            {
   
   
                "incr_fans_cnt": {
   
   
                    "unit": "number",
                    "value": 161
                },
                "live_duration": "8小时51分钟",
                "live_id": "753xxx35",
                "live_status": true,
                "live_title": "欢迎来到xxx直播间",
                "operation": {
   
   
                    "live_app_id": 2079,
                    "live_id": "753xxx35",
                    "show_big_screen": true,
                    "show_detail": true
                },
                "pay_order_cnt": {
   
   
                    "unit": "number",
                    "value": 404
                },
                "pay_order_gmv": {
   
   
                    "unit": "price",
                    "value": 100000
                },
                "start_time": "2025/07/31 05:58",
                "watch_ucnt": {
   
   
                    "unit": "number",
                    "value": 16364
                }
            },
            {
   
   
                "incr_fans_cnt": {
   
   
                    "unit": "number",
                    "value": 4655
                },
                "live_duration": "6天20小时",
                "live_id": "753xxx40",
                "live_status": false,
                "live_title": "欢迎来到xxx直播间",
                "operation": {
   
   
                    "live_app_id": 2079,
                    "live_id": "753xxx40",
                    "show_big_screen": true,
                    "show_detail": true
                },
                "pay_order_cnt": 
posted @ 2025-08-03 13:27  niaonao  阅读(0)  评论(0)    收藏  举报  来源