Skip to content

winner-hue/crawler4py

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crawler4py

A distributed crawler framework based on Python

项目初衷:


 由于目前各个网站反爬都很严重,以至于爬虫工程师在开发这些站点的时候都要付出很大的精力(吃力不讨好)。 所以本项目的目的就是想集成目前主流站点的爬虫插件。当爬虫工程师接到某个站点需求时,都可以 在本项目中找找是否已经有可用的插件(目的是解放大家的时间,让我们有更多精力去研究感兴趣的或更有价值的知识)。 至此,欢迎大家watch,start,fork;欢迎大家为项目提供插件。
  • 安装

    • 1.安装crawler4py

      pip install crawler4py
      
    • 2.安装redis

      说明:redis用来进行排重,支持集合排重和布隆过滤器排重
          
      centos:
          1: yum install redis-server -y
          2: [redis官网](https://redis.io/download)
      ubuntu: 
          
          1: sudo apt-get install redis-server
          2: [redis官网](https://redis.io/download)
      
    • 3.安装mysql

      说明:mysql用来作为任务库,关系型数据库方便对任务进行监控和修改
          
      centos: 
          1: yum install mysql-server -y
          2: [mysql官网](https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html)
      ubuntu: 
          1: sudo apt-get install mysql-server
          2: [mysql官网](https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html)
      
    • 4.安装MongoDB

      说明:MongoDB用来存储数据
          
      centos: 
          1: yum install mongod-server -y
          2: [mongodb官网](https://docs.mongodb.com/manual/installation/)
      ubuntu: 
          1: sudo apt-get install mongod-server
          2: [mongodb官网](https://docs.mongodb.com/manual/installation/)
      
    • 5.安装rabbitmq

      说明:rabbitmq用来作为消息中转站
          
      centos 
          yum install erlang-nox
          yum install rabbitmq-server
              
          可选(此处是通过命令,也可以通过界面的方式来添加):
              rabbitmqctl add_user crawler4py crawler4py  
              rabbitmqctl set_user_tags crawler4py administrator
              rabbitmqctl set_permissions -p crawler4py crawler4py '.*' '.*' '.*'
      ubuntu: 
          sudo apt-get install erlang-nox
          ssudo apt-get install rabbitmq-server
          
          可选(此处是通过命令,也可以通过界面的方式来添加):
              sudo rabbitmqctl add_user crawler4py crawler4py  
              sudo rabbitmqctl set_user_tags crawler4py administrator
              sudo rabbitmqctl set_permissions -p crawler4py crawler4py '.*' '.*' '.*'
      
  • 配置

    • 配置mysql

      • 用户创建与授权

        create user 'crawler4py'@'%' identified by 'crawler4py';
        grant all on *.* to 'crawler4py'@'%';
        
      • 创建数据库

        1. create database crawler4py;
        2. crawler4py --create_db (注:根据实际情况配置具体参数,参数查看 --help)
        
      • 创建任务表

        1. 运行table.sql中的内容                
        2. crawler4py --create_table
        
      • 添加任务

        1. 手动操作数据库添加任务
        2. crawler4py --add_task --task_url 网址
        
    • 配置setting文件

      setting 配置必须为字典格式
        BASE_DIR = os.path.dirname(__file__)
        setting = {
            "base_dir": BASE_DIR,
            "crawler_mode": 1,  # 爬虫模式, 1表示复杂模式, 0表示简单模式(已废弃)
            # 设置线程数量
            "dispatch_thread_size": 1,
            "downloader_thread_size": 0,
            "extractor_thread_size": 0,
            "storage_dup_thread_size": 0,
            # 限制下载任务队列的大小, 当超出一定值时, 将不再发送任务至下载队列
            "download_task_size_limit": 2,
            # redis 配置
            "redis": {
                # 排重库配置
                "dup": {
                    "pwd": None,
                    "host": "127.0.0.1",
                    "port": 6379,
                    "db": 0,
                    # 如果使用布隆过滤器, 则需配置
                    "bloomfilter": False,
                    "blocknum": 1,
                },
                # 临时任务库配置, 用于监控运行中的任务
                "task_monitor": {
                    "pwd": None,
                    "host": "127.0.0.1",
                    "port": 6379,
                    "db": 0,
                    "expire": 10 * 60
                },
            },
            # mongodb配置
            "mongo": {
                "database": {
                    "user": None,
                    "pwd": None,
                    "host": "127.0.0.1",
                    "port": 27017,
                    "collection_name": "database"
                }
            },
            # rabbitmq 配置
            "mq": {
                "host": "127.0.0.1",
                "port": 5672,
                "user": "crawler4py",
                "pwd": "crawler4py",
                "api_port": 15672
            },
            # mysql 配置
            "sql": {
                "driver": MySql,
                "user": "crawler4py",
                "pwd": "crawler4py",
                "host": "127.0.0.1",
                "port": 3306,
                "db": "crawler4py"
            },
            # rabbitmq 队列名称配置
            "mq_queue": {
                "download": "",
                "extract": "",
                "storage_dup": "",
                "recovery": "",
                "dispatch": ""
            },
            # 每次获取任务的间隔时间,以秒为单位
            "task_cell": 10,
            # 各个中心插件位置配置
            "plugins": {
                "download": "plugins.download",
                "extract": "plugins.extract",
                "storage_dup": "plugins.storage_dup",
                "dispatch": "plugins.dispatch"   # 目前没有调度插件,后续增加
            }
        }
      
  • 使用

    • 简单demo

      新建py文件
      输入:
        start = Starter.get_instance(**setting)
        start.start()
      运行即可开启爬虫
      
    • 撰写插件

      为不同的站点开发相应的插件, 需要配置setting的plugins。在配置好文件目录、以及任务类型(可选)。具体可以参照项目中plugins文件夹的配置方式
      下载器插件:
           按照网址域名编写py文件, 例如域名为baidu.com, 则py文件应为baidu_com.py
           接着在文件中定义自己的类,类名没有限制,但是需要继承基类 BaseDownload, 按照自己的需要,实现不同的逻辑
      提取插件:
           按照网址域名编写py文件, 例如域名为baidu.com, 则py文件应为baidu_com.py
           接着在文件中定义自己的类,类名没有限制,但是需要继承基类 BaseExtract, 按照自己的需要,实现不同的逻辑
      排重入库插件:
           按照网址域名编写py文件, 例如域名为baidu.com, 则py文件应为baidu_com.py
           接着在文件中定义自己的类,类名没有限制,但是需要继承基类 BaseStorageDup, 按照自己的需要,实现不同的逻辑
      

About

a crawler framework by python

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages