日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理

發(fā)布時間:2025/6/17 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文地址https://www.cnblogs.com/zhaof/p/7173397.html

這一篇文章主要是為了對scrapy框架的工作流程以及各個組件功能的介紹

Scrapy目前已經(jīng)可以很好的在python3上運行
Scrapy使用了Twisted作為框架,Twisted有些特殊的地方是它是事件驅(qū)動的,并且比較適合異步的代碼。對于會阻塞線程的操作包含訪問文件、數(shù)據(jù)庫或者Web、產(chǎn)生新的進程并需要處理新進程的輸出(如運行shell命令)、執(zhí)行系統(tǒng)層次操作的代碼(如等待系統(tǒng)隊列),Twisted提供了允許執(zhí)行上面的操作但不會阻塞代碼執(zhí)行的方法。

Scrapy data flow(流程圖)

?

Scrapy數(shù)據(jù)流是由執(zhí)行的核心引擎(engine)控制,流程是這樣的:
1、爬蟲引擎ENGINE獲得初始請求開始抓取。?
2、爬蟲引擎ENGINE開始請求調(diào)度程序SCHEDULER,并準(zhǔn)備對下一次的請求進行抓取。?
3、爬蟲調(diào)度器返回下一個請求給爬蟲引擎。?
4、引擎請求發(fā)送到下載器DOWNLOADER,通過下載中間件下載網(wǎng)絡(luò)數(shù)據(jù)。?
5、一旦下載器完成頁面下載,將下載結(jié)果返回給爬蟲引擎ENGINE。?
6、爬蟲引擎ENGINE將下載器DOWNLOADER的響應(yīng)通過中間件MIDDLEWARES返回給爬蟲SPIDERS進行處理。?
7、爬蟲SPIDERS處理響應(yīng),并通過中間件MIDDLEWARES返回處理后的items,以及新的請求給引擎。?
8、引擎發(fā)送處理后的items到項目管道,然后把處理結(jié)果返回給調(diào)度器SCHEDULER,調(diào)度器計劃處理下一個請求抓取。?
9、重復(fù)該過程(繼續(xù)步驟1),直到爬取完所有的url請求。

各個組件介紹

爬蟲引擎(ENGINE)
爬蟲引擎負責(zé)控制各個組件之間的數(shù)據(jù)流,當(dāng)某些操作觸發(fā)事件后都是通過engine來處理。

調(diào)度器(SCHEDULER)
調(diào)度接收來engine的請求并將請求放入隊列中,并通過事件返回給engine。

下載器(DOWNLOADER)
通過engine請求下載網(wǎng)絡(luò)數(shù)據(jù)并將結(jié)果響應(yīng)給engine。

Spider
Spider發(fā)出請求,并處理engine返回給它下載器響應(yīng)數(shù)據(jù),以items和規(guī)則內(nèi)的數(shù)據(jù)請求(urls)返回給engine。

管道項目(item pipeline)
負責(zé)處理engine返回spider解析后的數(shù)據(jù),并且將數(shù)據(jù)持久化,例如將數(shù)據(jù)存入數(shù)據(jù)庫或者文件。

下載中間件
下載中間件是engine和下載器交互組件,以鉤子(插件)的形式存在,可以代替接收請求、處理數(shù)據(jù)的下載以及將結(jié)果響應(yīng)給engine。

spider中間件
spider中間件是engine和spider之間的交互組件,以鉤子(插件)的形式存在,可以代替處理response以及返回給engine items及新的請求集。

如何創(chuàng)建Scrapy項目

創(chuàng)建Scrapy項目

創(chuàng)建scrapy項目的命令是scrapy startproject 項目名,創(chuàng)建一個爬蟲
進入到項目目錄scrapy genspider 爬蟲名字 爬蟲的域名,例子如下:

zhaofandeMBP:python_project zhaofan$ scrapy startproject test1 New Scrapy project 'test1', using template directory '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scrapy/templates/project', created in:/Users/zhaofan/Documents/python_project/test1You can start your first spider with:cd test1scrapy genspider example example.com zhaofandeMBP:python_project zhaofan$ zhaofandeMBP:test1 zhaofan$ scrapy genspider shSpider hshfy.sh.cn Created spider 'shSpider' using template 'basic' in module:test1.spiders.shSpider

scrapy項目結(jié)構(gòu)

items.py 負責(zé)數(shù)據(jù)模型的建立,類似于實體類。
middlewares.py 自己定義的中間件。
pipelines.py 負責(zé)對spider返回數(shù)據(jù)的處理。
settings.py 負責(zé)對整個爬蟲的配置。
spiders目錄 負責(zé)存放繼承自scrapy的爬蟲類。
scrapy.cfg scrapy基礎(chǔ)配置

?

轉(zhuǎn)載于:https://www.cnblogs.com/111testing/p/10325358.html

總結(jié)

以上是生活随笔為你收集整理的Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。