zaoxg

new a id


Keywords
aiohttp, spider
License
MIT
Install
pip install zaoxg==0.0.1

Documentation

ReSpider

开始一个爬虫

爬虫继承自 <ReSpider.Spider> 类

import ReSpider


class TestSpider(ReSpider.Spider):
    # 自定义配置
    __custom_setting__ = {}
    start_urls = []

    def start_requests(self):
        pass

    def parse(self, response):
        pass


if __name__ == '__main__':
    TestSpider().start()    

通过命令创建

respider create -p project_name  # 创建项目
respider create -s spider_name  # 创建爬虫程序, 需要符合命名规范

自定义设置

__custom_setting__ = {
    'TASK_LIMIT': 1,  # 设置并发数, 默认为1
    'SCHEDULER': 'ReSpider.extend.redis.scheduler.RedisScheduler',  # 设置任务队列, 默认为内存
    'DOWNLOAD_DELAY': 1,  # 下载延迟, 默认为0
    'RETRY_ENABLED': True,  # 重试, 设置为True开启重试, 默认关闭
    'SSL_FINGERPRINT': False  # ssl指纹, 默认关闭, 在创建ssl上下文时会阻塞, 开启后并发会降为1 
}

中间件设置

# 管道
ITEM_PIPELINES = {
    'ReSpider.pipelines.files.CSVPipeline': 4,
    'ReSpider.pipelines.redis.RedisPipeline': 5,
    'ReSpider.pipelines.files.FilesPipeline': 6,
    'ReSpider.pipelines.mongodb.MongoDBPipeline': 8
}

# 下载中间件
DOWNLOADER_MIDDLEWARES = {
    'ReSpider.middlewares.useragent.UserAgentMiddleware': 2,
    # 'ReSpider.extend.puppeteer.downloadmiddleware.PuppeteerMiddleware': 5,
    'ReSpider.middlewares.retry.RetryMiddleware': 8
}

信号 (待开发)

添加信号参数

  • 解决任务完成时偶先程序无法正常停止的问题(浏览器渲染下浏览器无法关闭)
  • 中间件和管道增加关闭标志(is_closed)
  • 根据传递的信号参数对是否关闭标志进行赋值,根据标志来开关中间件或管道

保存数据

Item

一般的数据实体

from ReSpider import item
data = DataItem({'name': 'ReSpider'}, **kwargs)

xxListItem

数据实体列表, 可以传入一个list来构造

from ReSpider import item
data_list_item = DataListItem([1, 2, 3], **kwargs)

保存数据

# 二进制数据
io_item = item.IoItem(b'hello world', filename='hello world', filetype='bin')

# 文件类型, filetype 为文件类型
file_item = item.FileItem('hello world', filename='hello world', filetype='text')

# 表格数据
csv_item = item.CSVItem({'name': '张三', 'age': 14}, filename='hello world')

# 多行使用list
csv_list = item.CSVListItem([{'name': '张三', 'age': 14}, {'name': '李四', 'age': 19}], filename='法外狂徒')

# 使用yield来保存数据
data = item.DataItem()
yield data

Log

日志设置

__custom_setting__ = {
    'LOG_PATH': None,  # log文件写入位置
    'LOG_TO_CONSOLE': True,  # 输出日志到控制台, 默认开启
    'LOG_LEVEL_CONSOLE': 'DEBUG',  # 输出日志到控制台级别, 默认DEBUG
    'LOG_TO_FILE': False,  # 输出日志到文件, 默认关闭, 设置为True开启
    'LOG_LEVEL_FILE': 'WARNING'  # 输出日志到文件级别, 默认WARNING
}

JS渲染

无头模式下cookie问题