![精通Scrapy网络爬虫](https://wfqqreader-1252317822.image.myqcloud.com/cover/441/26943441/b_26943441.jpg)
2.1 Scrapy框架结构及工作原理
图2-1展示了Scrapy框架的组成结构,并从数据流的角度揭示Scrapy的工作原理。
![](https://epubservercos.yuewen.com/9874D6/15367244805316006/epubprivate/OEBPS/Images/Figure-0021-0005.jpg?sign=1739252697-zNhPeWYq8Skxmkf2PmdqntJAxLlImJFJ-0-6b41a1b0f012383115fe68ed989b71c4)
图2-1
首先,简单了解一下Scrapy框架中的各个组件,如表2-1所示。
表2-1
![](https://epubservercos.yuewen.com/9874D6/15367244805316006/epubprivate/OEBPS/Images/Figure-0021-0006.jpg?sign=1739252697-XX2AJT7GRcmeZSDe2wEqpoKIWBJEfNZk-0-8f92c4baf84b31d49191f0b62c3119e5)
对于用户来说,Spider是最核心的组件,Scrapy爬虫开发是围绕实现Spider展开的。
接下来,看一下在框架中的数据流,有表2-2所示的3种对象。
表2-2
![](https://epubservercos.yuewen.com/9874D6/15367244805316006/epubprivate/OEBPS/Images/Figure-0022-0007.jpg?sign=1739252697-K49RbvujWbs7oMMG35xVABT57Lg1P7M5-0-7bb3384477914172b12a8f1fc2f5daf5)
Request和Response是HTTP协议中的术语,即HTTP请求和HTTP响应,Scrapy框架中定义了相应的Request和Response类,这里的Item代表Spider从页面中爬取的一项数据。
最后,我们来说明以上几种对象在框架中的流动过程。
● 当SPIDER要爬取某URL地址的页面时,需使用该URL构造一个Request对象,提交给ENGINE(图2-1中的1)。
● Request对象随后进入SCHEDULER按某种算法进行排队,之后的某个时刻SCHEDULER将其出队,送往DOWNLOADER(图2-1中的2、3、4)。
● DOWNLOADER根据Request对象中的URL地址发送一次HTTP请求到网站服务器,之后用服务器返回的HTTP响应构造出一个Response对象,其中包含页面的HTML文本(图2-1中的5)。
● Response对象最终会被递送给SPIDER的页面解析函数(构造Request对象时指定)进行处理,页面解析函数从页面中提取数据,封装成Item后提交给ENGINE, Item之后被送往ITEM PIPELINES进行处理,最终可能由EXPORTER(图2-1中没有显示)以某种数据格式写入文件(csv, json);另一方面,页面解析函数还从页面中提取链接(URL),构造出新的Request对象提交给ENGINE(图2-1中的6、7、8)。
理解了框架中的数据流,也就理解了Scrapy爬虫的工作原理。如果把框架中的组件比作人体的各个器官,Request和Response对象便是血液,Item则是代谢产物。