1. 程式人生 > >scrapy原始碼分析(三)---------ExecutionEngine(二)一個request的週期

scrapy原始碼分析(三)---------ExecutionEngine(二)一個request的週期

上一篇中講解了ExecutionEngine的主迴圈流程,下面就具體講解下不需要擱置時,如何處理一個request,從下載頁面到解析頁面,最後到資料處理的整個流程。

幾個核心的類介紹如下:

1.Scraper:刮取器。用於對下載後的結果進行處理,主要使用ItemPipelineManager對資料進行入資料庫等操作。

2.Downloader:下載器。對同時下載網頁的併發度進行控制,同時通過DownloaderMiddlewareManager來對request,response進行各個中介軟體的操作。並通過HTTP11DownloadHandler來使用twisted的連線池進行網頁下載操作。

工作流程圖如下:


相關推薦

scrapy原始碼分析---------ExecutionEngine一個request週期

上一篇中講解了ExecutionEngine的主迴圈流程,下面就具體講解下不需要擱置時,如何處理一個request,從下載頁面到解析頁面,最後到資料處理的整個流程。 幾個核心的類介紹如下: 1.Scr

Scrapy原始碼分析:訊號管理器SignalManager

類的位置scrapy.signalmanager.SignalManager。主要是對pydispatch.dispatcher的一層封裝。 首先來看看pydispatch.dispatcher都有哪些功能:專案主頁 這個模組主要提供了訊息的傳送和接收功能,主頁的示例:

React Fiber原始碼分析非同步狀態

先附上流程圖~       呼叫setState時, 會呼叫classComponentUpdater的enqueueSetState方法, 同時將新的state作為payload引數傳進 enqueueSetState會先呼叫requestCurrentTime獲

以太坊原始碼分析之 P2P網路、UDP底層通訊

區塊鏈特輯 :https://blog.csdn.net/fusan2004/article/details/80879343,歡迎查閱,原創作品,轉載請標明!這周工作有點小忙,部門區塊鏈基礎平臺的開發開始進入節奏了,和上一篇間隔間隔有點久了,以後還是要堅持,不能剛開始就犯毛

springMVC原始碼分析--頁面跳轉RedirectView

跳轉的示例:@RequestMapping("/index") public String index(Model model,RedirectAttributes attr){ attr.addAttribute("attributeName", "attribute

springMVC原始碼分析--HttpMessageConverter寫write操作

簡單的返回值處理示例使用@ResponseBody進行註解:@ResponseBody @RequestMapping("/get") public Object get(){ Product product = new Product(); product.se

libevent高效能網路庫原始碼分析——事件(event)及其介面

libevent的結構 event結構 // include/event2/event_struct.h struct event { TAILQ_ENTRY(event) ev_active_next; // 已就緒的事件連結串列

scrapy原始碼分析---------------CrawlProcess

上一篇教程中講到crawl命令最終會執行CrawlProcess的crawl和start方法。這一篇對CrawlProcess的原始碼進行詳細分析,來了解一下是如何進行爬取任務的。 先看一下CrawlProcess的建構函式: scrapy/crawler.py: 可以看到

scrapy原始碼分析十一----------下載器Downloader

經過前面幾篇的分析,scrapy的五大核心元件已經介紹了4個:engine,scheduler,scraper,spidemw。 還剩最後一個downloader,這個下載器關係到了網頁如何下載,內容相對來說是最為複雜的一部分,這篇教程就逐步分析其原始碼。 下載操作開始於

Scrapy原始碼分析:請求Request

本次我們要分析的Scrapy原始碼為Request模組,模組的位置: from scrapytest.http import Request 首先把Request的原始碼附上: class Request(object_ref): def __init__(sel

JUC原始碼分析-執行緒池篇:ThreadPoolExecutor

在多執行緒程式設計中,任務都是一些抽象且離散的工作單元,而執行緒是使任務非同步執行的基本機制。隨著應用的擴張,執行緒和任務管理也變得非常複雜,為了簡化這些複雜的執行緒管理模式,我們需要一個“管理者”來統一管理執行緒及任務分配,這就是執行緒池。本章開始,我們將逐個分析 JUC

jQuery原始碼分析——常用正則表示式RegExp

常用的數字正則(嚴格匹配) 正則 含義 ^[1-9]\d*$ 匹配正整數 ^-[1-9]\d*$ 匹配負整數 ^-?[1-9]\d*$ 匹配整數 ^[1-9]\d*|0$ 匹配非負整數(正整數 +

原始碼分析篇--Java集合操作2

4、兩大集合介面 在Java集合中,有兩大集合,一個是Collection介面及其實現類,另一個是Map介面及其實現類。下面給出這兩種集合的框架圖。如下所示。 4.1Collection介面框架圖 4.2Map介面框架圖 從上面兩個框架圖可以看出,Cllection介面和Map介面是

原始碼分析篇--Java集合操作1

一、集合框架 1、集合框架體系圖 2、集合的概念  Java集合是使程式能夠儲存和操縱元素不固定的一組資料。 所有Java集合類都位於java.uti包中。與Java陣列不同,Java集合中不能存放基本資料型別,只能存放物件的引用。但是在JDK5.0以後的版本當中,JAVA增加了“自動裝箱

原始碼分析篇--Java集合操作6順序表的擴容原理

2.6.4 順序表的擴容原理之add()方法的實現原理 add()方法用於將元素動態新增到ArrayList容器中。將資料儲存在list後,我們可以通過該list進行CRUD操作。我們知道,list(列表)的底層是由陣列設計的,因此,陣列具備了哪些優缺點,list就具備了哪些優缺點。我們知道

openssl之aes加密原始碼分析 AES_encrypt 與 AES_cbc_encrypt ,加密模式

首先要了解AES加密是什麼,以及幾種加密模式的區別。之後才是程式設計。具體的程式設計案例,在下面的連結。 下面這個連結有詳細圖解。http://www.cnblogs.com/adylee/

Android 8.0系統原始碼分析--Binder程序間通訊

 開始我們的沉澱之路,老羅的書中第二章講的是Android HAL層的知識,而且直接自己實現了一個虛擬的freg驅動程式,後面的幾節是分別從native、java層如何訪問這個虛擬的驅動程式介面,我這裡沒有這樣的環境,所以就不分析這節了,第三章的智慧指標我對比8.0系統原

jQuery原始碼分析--event事件繫結

上文提到,jquery的事件繫結有bind(),delegate()和one()以及live()方式。我用的jQuery2.1.3版本,live()已經被廢棄了。 bind(),delegate()和one()的內部原始碼。 //7491行 bind

【Java8原始碼分析】併發包-ConcurrentHashMap

一、CAS原理簡介 Java8中,ConcurrentHashMap摒棄了Segment的概念,而是啟用了一種全新的方式實現:利用CAS演算法。它沿用了HashMap的思想,底層依然由“陣列”+連結串列+紅黑樹的方式實現。 那什麼CAS演算法呢?以前採用鎖的

Vue學習之原始碼分析--Vue.js依賴收集

為什麼要依賴收集 先看下面這段程式碼 new Vue({ template: `<div> <span>text1:</span> {{text1}}