python的编程工具spider_GitHub - chenpython/boris-spider: boris-spider是一款使用Python语言编写的爬虫框架,于多年的爬虫业务中不断磨合而诞...

boris-spider

boris-spider是一款使用Python语言编写的爬虫框架,于多年的爬虫业务中不断磨合而诞生,相比于scrapy,该框架更易上手,且又满足复杂的需求,支持分布式及批次采集。

特性

自动下载与重试异常请求,返回的response支持xpath、css、re等解析方式。自动处理中文乱码;

支持 单进程爬虫, 分布式爬虫,批次爬虫。批次爬虫封装了周期性采集数据的逻辑,批次开始时自动下发任务,抓取数据,统计任务处理速度,预估批次是否会超时,超时报警等;

可随时终止、启动爬虫,任务不丢失不漏采;

支持注册多模板,即可将多个网站的解析模板注册到同一个爬虫内,由该爬虫统一管理;

内置DebugSpider与DebugBatchSpider调试爬虫,调试代码更方便,且不会将调试过程中的数据入库,造成数据污染;

支持以模板的方式创建爬虫项目、解析模板、数据item;

数据自动入库,不需要编写Pipeline;

框架流程图

模块说明:

spider 框架调度核心

parser_control 模版控制器,负责调度parser

collector 任务收集器,负责从任务队里中批量取任务到内存,以缓冲对任务队列数据库的访问频率及并发量

parser 数据解析器

start_request 初始任务下发函数

item_buffer 数据缓冲队列,批量将数据存储到数据库中

request_buffer 请求任务缓冲队列,批量将请求任务存储到任务队列中

request 数据下载器,封装了requests,用于从互联网上下载数据

response 数据返回体,封装了response, 支持xpath、css、re等解析方式。自动处理中文乱码

流程说明

spider调度start_request生产任务

start_request下发任务到request_buffer中

spider调度request_buffer批量将任务存储到任务队列数据库中

spider调度collector从任务队列中批量获取任务到内存队列

spider调度parser_control从collector的内存队列中获取任务

parser_control调度request请求数据

request请求与下载数据

request将下载后的数据给response,进一步封装

将封装好的response返回给parser_control(图示为多个parser_control,表示多线程)

parser_control调度对应的parser,解析返回的response(图示多组parser表示不同的网站解析器)

parser_control将parser解析到的数据item及新产生的request分发到item_buffer与request_buffer

spider调度item_buffer与request_buffer将数据批量入库

环境要求:

Python 3.6.0+

Works on Linux, Windows, macOS

安装

From PyPi:

pip3 install boris-spider

From Git:

pip3 install git+https://github.com/Boris-code/boris-spider.git

快速上手

创建爬虫

spider create -p first_spider

创建后的爬虫代码如下:

import spider

class FirstSpider(spider.SingleSpider):

def start_requests(self, *args, **kws):

yield spider.Request("https://www.baidu.com")

def parser(self, request, response):

# print(response.text)

print(response.xpath('//input[@type="submit"]/@value').extract_first())

if __name__ == "__main__":

FirstSpider().start()

直接运行,打印如下:

Thread-2|2020-05-19 18:23:41,128|request.py|get_response|line:283|DEBUG|

-------------- FirstSpider.parser request for ----------------

url = https://www.baidu.com

method = GET

body = {'timeout': 22, 'stream': True, 'verify': False, 'headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36'}}

百度一下

Thread-2|2020-05-19 18:23:41,727|parser_control.py|run|line:415|INFO| parser 等待任务 ...

FirstSpider|2020-05-19 18:23:44,735|single_spider.py|run|line:83|DEBUG| 无任务,爬虫结束

福利

框架内的utils/tools.py模块下积累了作者多年的工具类函数,种类达到100+,且之后还会不定期更新,具有搬砖价值!

学习交流

如学习中遇到问题,可加下面的QQ群

群号:750614606

知识星球:

星球会不定时分享爬虫技术干货,涉及的领域包括但不限于js逆向技巧、爬虫框架刨析、爬虫技术分享等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值