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
原理说明
- 消息队列使用 redis,采集策略使用先进先出
- 每个爬虫都有一个 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
- 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': '页码'}) # 通用字段
下载安装
- git clone https://github.com/TurboWay/spiderman.git; cd spiderman;
- 【不使用虚拟环境的话,可以跳过步骤23】virtualenv -p /usr/bin/python3 venv
- 【不使用虚拟环境的话,可以跳过步骤23】source venv/bin/activate
- pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
- 修改配置 vi SP/settings.py
- 运行demo示例 python SP_JOBS/zhifang_job.py
demo采集效果
爬虫元数据
cluster模式
standalone模式
kafka实时采集监控
开源地址
https://github.com/TurboWay/spiderman
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:http://blog.turboway.top/article/spiderman/
许可协议:署名-非商业性使用 4.0 国际许可协议
冰风
2 楼 - 3 年,8月前
大佬有交流群吗 在部署过程中遇到很多麻烦 没地方请教