spiderman

一个基于 scrapy-redis 的通用分布式爬虫框架

功能

  • 自动建表
  • 自动生成爬虫代码,只需编写少量代码即可完成分布式爬虫
  • 自动存储元数据,分析统计和补爬都很方便
  • 适合多站点开发,每个爬虫独立定制,互不影响
  • 调用方便,可以根据传参自定义采集的页数以及启用的爬虫数量
  • 扩展简易,可以根据需要选择采集模式,单机 standalone (默认) 或者 分布式cluster
  • 反爬处理简易,已封装各种反爬中间件
  • 采集数据落地方便,支持多种数据库,只需在 spider 中启用相关的管道
    • [x] mysql
    • [x] sqlserver
    • [x] oracle
    • [x] postgresql
    • [x] sqlite3
    • [x] hbase
    • [x] mongodb
    • [x] elasticsearch
    • [x] hdfs
    • [x] hive
    • [x] datafile, 比如 csv

原理说明

  1. 消息队列使用 redis,采集策略使用先进先出
  2. 每个爬虫都有一个 job 文件,使用 job 来生成初始请求类 ScheduledRequest,并将其推送到 redis; 初始请求全部推到 redis 后,运行 spider 解析生成数据 并迭代新的请求到redis, 直到 redis 中的全部请求被消耗完
# scrapy_redis请求类
class ScheduledRequest:

    def __init__(self, **kwargs):
        self.url = kwargs.get('url')                 # 请求url
        self.method = kwargs.get('method', 'GET')   # 请求方式 默认get
        self.callback = kwargs.get('callback')  # 回调函数,指定spider的解析函数
        self.body = kwargs.get('body')  # body, method为post时, 作为 post表单
        self.meta = kwargs.get('meta')  # meta, 携带反爬信息比如cookies,headers; 以及一些元数据,比如 pagenum
  1. item 类定义表名、字段名、排序号(自定义字段顺序)、注释说明(便于管理元数据)、字段类型(仅关系型数据库管道有效)
class zhifang_list_Item(scrapy.Item):
    #  define table
    tablename = 'zhifang_list'
    tabledesc = '列表'
    # define the fields for your item here like:
    # 关系型数据库,可以自定义字段的类型、长度,默认 VARCHAR(length=255)
    # colname = scrapy.Field({'idx': 1, 'comment': '名称', 'type': VARCHAR(255)})
    tit = scrapy.Field({'idx': 1, 'comment': '房屋标题'})
    txt = scrapy.Field({'idx': 2, 'comment': '房屋描述'})
    tit2 = scrapy.Field({'idx': 3, 'comment': '房屋楼层'})
    price = scrapy.Field({'idx': 4, 'comment': '房屋价格'})
    agent = scrapy.Field({'idx': 5, 'comment': '房屋中介'})
    # default column
    detail_full_url = scrapy.Field({'idx': 100, 'comment': '详情链接'})  # 通用字段
    pkey = scrapy.Field({'idx': 101, 'comment': 'md5(detail_full_url)'})  # 通用字段
    pagenum = scrapy.Field({'idx': 102, 'comment': '页码'})  # 通用字段

下载安装

  1. git clone https://github.com/TurboWay/spiderman.git; cd spiderman;
  2. 【不使用虚拟环境的话,可以跳过步骤23】virtualenv -p /usr/bin/python3 venv
  3. 【不使用虚拟环境的话,可以跳过步骤23】source venv/bin/activate
  4. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
  5. 修改配置 vi SP/settings.py
  6. 运行demo示例 python SP_JOBS/zhifang_job.py

demo采集效果

image-20201021151908485

image-20201021151557718

image-20201021151642498

爬虫元数据

image-20201021151703886

cluster模式

image-20201021151725165

standalone模式

image-20201021151713336

kafka实时采集监控

image-20201021151735112

开源地址

https://github.com/TurboWay/spiderman

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:http://blog.turboway.top/article/spiderman/

许可协议:署名-非商业性使用 4.0 国际许可协议