介绍大家一款超级灵活,友好并且超级实用的爬虫框架!得心应手!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了介绍大家一款超级灵活,友好并且超级实用的爬虫框架!得心应手!相关的知识,希望对你有一定的参考价值。

技术分享图片

 

技术分享图片

 

主要特点

  • 框架代码结构简单易用,易于修改。例如针对出现验证码的处理方法。
  • 采用gevent实现并发操作,与scrapy的twisted相比,代码更容易理解。
  • 完全模块化的设计,强大的可扩展性。
  • 使用方式和结构参考了 scrapy 和 webmagic 。对有接触过这两个框架的朋友非常友好。
  • 对数据的解析模块并没有集成,可以自由使用 beautifulsoup 、 lxml 、 pyquery、 html5lib 等等各种解析器进行数据抽取。
  • 集成代理换IP功能。
  • 支持多线程。
  • 支持分布式。
  • 支持增量爬取。
  • 支持爬取js动态渲染的页面。
  • 提供webapi对爬虫进行管理、监控。
  • 提供即时爬虫的集成思路和结构。
技术分享图片

 

#!/usr/bin/env python# -*- coding: utf-8 -*-from bs4 import BeautifulSoup as bsfrom sasila.slow_system.base_processor import BaseProcessorfrom sasila.slow_system.downloader.http.spider_request import Requestfrom sasila.slow_system.core.request_spider import RequestSpiderclass Mzi_Processor(BaseProcessor): spider_id = ‘mzi_spider‘ spider_name = ‘mzi_spider‘ allowed_domains = [‘mzitu.com‘] start_requests = [Request(url=‘http://www.mzitu.com/‘, priority=0)] @checkResponse def process(self, response): soup = bs(response.m_response.content, ‘lxml‘) print soup.title.string href_list = soup.select(‘a‘) for href in href_list: yield Request(url=response.nice_join(href[‘href‘]))

写法与scrapy几乎一样

  • 所有的解析器都继承自 BaseProcessor ,默认入口解析函数为def process(self, response)。
  • 为该解析器设置spider_id和spider_name,以及限定域名。
  • 初始爬取请求为 start_requests ,构建Request对象,该对象支持GET、POST方法,支持优先级,设置回调函数等等所有构建request对象的一切属性。默认回调函数为 process 。
  • 可以使用@checkResponse装饰器对返回的 response 进行校验并记录异常日志。你也可以定义自己的装饰器。
  • 解析函数因为使用 yield 关键字,所以是一个生成器。当 yield 返回 Request 对象,则会将 Request 对象推入调度器等待调度继续进行爬取。若 yield 不是返回 Request 对象则会进入 pipeline , pipeline 将对数据进行清洗入库等操作。
技术分享图片

 

  • RequestSpider已经默认设置好了 downloader 和 scheduler ,如果不满意,可以自己进行定制。
  • 可以为spider设置 downloader 和 pipeline 甚至 scheduler
spider = spider.set_pipeline(ConsolePipeline())
  • 可以通过该方式启动爬虫
spider.start()
  • 也可以将spider注入 manager 进行管理
from sasila.slow_system.manager import managermanager.set_spider(spider)sasila.start()
技术分享图片

 

架构

技术分享图片

 

  • 任务由 scheduler 发起调度,downloader 抓取网页内容, processor 执行预先编写的py脚本,输出结果或产生新的提链任务(发往 scheduler),形成闭环。
  • 每个脚本被认为是一个spider,spiderid确定一个任务。
  • downloader
  1. method, header, cookie, proxy,timeout 等等抓取调度控制。
  2. 可以通过适配类似 phantomjs 的webkit引擎支持渲染。
  • processor
  1. 灵活运用pyquery,beautifulsoup等解析页面。
  2. 在脚本中完全控制调度抓取的各项参数。
  3. 可以向后链传递信息。
  4. 异常捕获。
  • scheduler
  1. 任务优先级。
  2. 对任务进行监控。
  3. 对任务进行去重等操作。
  4. 支持增量。
  • webApi
  1. 对爬虫进行增删改查等操作。
  • 非及时爬虫流程图
技术分享图片

 

即时爬虫

即时爬虫是可以通过api调用,传入需要爬取的页面或者需求,即时爬取数据并返回结果。现阶段开发并不完善。仅提供思路参考。示例核心代码在 sasila.immediately_system 中。

  • 即时爬虫-获取数据流程图
技术分享图片

 

  • 即时爬虫-授权流程图
技术分享图片

 

为啥叫Sasila

作为一个wower,你可以猜到吗ヾ( ̄▽ ̄)

更多源码请进群:125240963   即可获取

以上是关于介绍大家一款超级灵活,友好并且超级实用的爬虫框架!得心应手!的主要内容,如果未能解决你的问题,请参考以下文章

超级实用的Python网络爬虫反反爬策略之构造UA池及IP代理池

Spark学习笔记总结-超级经典总结

APICloud开发者进阶之路 | 超级实用技巧

记录--10个超级实用的SetMap使用技巧

一款牛掰的Java爬虫框架(高度灵活可配置)

今天来share一款超级超级好用的前端开发的IDE