美文网首页
scrapy --重拾(1)

scrapy --重拾(1)

作者: 周周周__ | 来源:发表于2020-04-08 10:43 被阅读0次

    scrapy框架是python最出名的爬虫框架之一。之前用过,但是没有详细的记录过,现在需要进行整体系统的学习一遍。

    一、python的异步爬虫框架

    现在熟知的python 异步爬虫 有scrapy、tornado、aiohttp。 tornado 我个人是没有通过,aiohttp是异步框架(比较简单),第三方库完善程度也不是太好。所以现在用的最多的python爬虫还是scrapy。 可能很多人会疑问,python现在流行的异步是基于asyncio,也就是出现了aiohttp,那么scrapy为什么不用aiohttp呢?答案是scrapy出现的时候,还没有aiohttp什么鸟事。 我们都知道异步和同步的区别是:异步有回调,由开发者定义函数执行完的回调函数,同步则是由程序进行调控。所以说我们的异步都是基于事件循环

    • aiohttp基于asyncio,主要是创建一个pool,我们将协程对象放进去,进行回调执行。这个过程我感觉很像搞了一个node,同时py中很多语法也是基于node的。
    • scrapy是基于twisted,twisted是py编写的事件驱动的网络框架。具体没有深究。。。
    二、scrapy

    scrapy很完善,完善的处理了很多大型爬虫搭建的基本功能。如果是小量爬虫,还是requests/aiohttp香。 scrapy能够完美的嵌入我们自己写的中间件,和搭配redis进行使用,这让它的功能更适合搭建大型爬虫。

    这是网络上流传最多的图:

    Scrapy --重拾(1)

    万年不变的图.png

    简单的巩固一下自己的知识:

    • 引擎(engine):负责整体(其他模块)的调度
    • 调度器(scheduler): 负责引擎发送过来的requst,并排队入列,返回给引擎
    • 下载器(downloader):负责引擎发送过来的requst,并将获取到的response返回给引擎
    • 管道(pipline):负责引擎发送过来的数据,进行后期处理(持久化)
    • 爬虫(spider):由开发者编写,主要功能是负责解析界面中的数据,将需要储存的和进一步请求的分别给引擎进行不同的处理
    • 下载中间件(downloader_middlewares): 扩展自定义下载的功能,比如:ua、ip等
    • spider中间件(spider_middlewares):自定义引擎和spider中间的功能。

    基本的运转流程:
    1、引擎从Spiders中获取到的最初的要爬取的请求(Requests)。
    2、引擎安排请求(Requests)到调度器中,并向调度器请求下一个要爬取的请求(Requests)。
    3、调度器返回下一个要爬取的请求(Request)给请求。
    4、引擎从上步中得到的请求(Requests)通过下载器中间件(Downloader Middlewares)发送给下载器(Downloader),这个过程中下载器中间件(Downloader Middlerwares)中的process_request()函数就会被调用。
    5、一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(Downloader Middlewares)中的process_response()函数,最后返回给引擎
    6、引擎从下载器中得到上步中的Response并通过Spider中间件(Spider Middewares)发送给Spider处理,这个过程中Spider中间件(Spider Middlewares)中的process_spider_input()函数会被调用到。
    7、Spider处理Response并通过Spider中间件(Spider Middlewares)返回爬取到的Item及(跟进的)新的Request给引擎,这个过程中Spider中间件(Spider Middlewares)的process_spider_output()函数会被调用到。
    8、引擎将上步中Spider处理的及其爬取到的Item给Item管道(Piplline),将Spider处理的Requests发送给调度器,并向调度器请求可能存在的下一个要爬取的请求(Requests)
    9、(从第二步)重复知道调度器中没有更多的请求(Requests)。

    以上均是一字一码,复习不易,共同学习

    相关文章

      网友评论

          本文标题:scrapy --重拾(1)

          本文链接:https://www.haomeiwen.com/subject/fcvzphtx.html