scrapy框架架构
介紹
Scrapy一個開源和協(xié)作的框架,其最初是為了頁面抓取 (更確切來說, 網絡抓取 )所設計的,使用它可以以快速、簡單、可擴展的方式從網站中提取所需的數據。但目前Scrapy的用途十分廣泛,可用于如數據挖掘、監(jiān)測和自動化測試等領域,也可以應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。
Scrapy 是基于twisted框架開發(fā)而來,twisted是一個流行的事件驅動的python網絡框架。因此Scrapy使用了一種非阻塞(又名異步)的代碼來實現并發(fā)。
架構
流程解析
組件說明
引擎(EGINE):
引擎負責控制系統(tǒng)所有組件之間的數據流,并在某些動作發(fā)生時觸發(fā)事件。
調度器(SCHEDULER):
用來接受引擎發(fā)過來的請求, 壓入隊列中, 并在引擎再次請求的時候返回. 可以想像成一個URL的優(yōu)先級隊列, 由它來決定下一個要抓取的網址是什么, 同時去除重復的網址
下載器(DOWLOADER)
用于下載網頁內容, 并將網頁內容返回給EGINE,下載器是建立在twisted這個高效的異步模型上的
爬蟲(SPIDERS)
SPIDERS是開發(fā)人員自定義的類,用來解析responses,并且提取items,或者發(fā)送新的請求
項目管道(ITEM PIPLINES)
在items被提取后負責處理它們,主要包括清理、驗證、持久化(比如存到數據庫)等操作
下載器中間件(Downloader Middlewares)
位于Scrapy引擎和下載器之間,主要用來處理從EGINE傳到DOWLOADER的請求request,已經從DOWNLOADER傳到EGINE的響應response,你可用該中間件做以下幾件事:
- 在request發(fā)往下載器之前對requests進行處理(也就是在爬取網站之前)
- 在response 傳遞給爬蟲之前,修改response
- 不給爬蟲發(fā)送收到的response, 而是給它發(fā)送新的request,
- 不爬取網頁,直接給爬蟲返回response
- 丟棄一些request
爬蟲中間件(Spider Middlewares)
位于EGINE和SPIDERS之間,主要工作是處理SPIDERS的輸入(即responses)和輸出(即requests)
命令行工具
全局命令
startproject 創(chuàng)建項目
genspider: scrapy genspider [-t template] <name> <domain>生成爬蟲,-l 查看模板; -t 指定模板,name爬蟲名,domain域名
settings 查看設置
runspider 運行爬蟲(運行一個獨立的python文件,不必創(chuàng)建項目)
shell :scrapy shell [url]進入交互式命令行,可以方便調試
–spider=SPIDER 忽略爬蟲自動檢測,強制使用指定的爬蟲
-c 評估代碼,打印結果并退出:
$ scrapy shell --nolog http://www.example.com/ -c '(response.status, response.url)' (200, 'http://www.example.com/')–no-redirect 拒絕重定向
–nolog 不打印日志
response.status 查看響應碼
response.url
response.text; response.body 響應文本;響應二進制
view(response) 打開下載到本地的頁面,方便分析頁面(比如非靜態(tài)元素)
?
fetch 查看爬蟲是如何獲取頁面的,常見選項如下:
view 同交互式命令中的view
version
項目命令
項目結構和爬蟲應用簡介
scrapy startproject tutorial tutorial/scrapy.cfg # 項目的主配置信息,用來部署scrapy時使用,爬蟲相關的配置信息在settings.py文件中tutorial/ # 項目模塊__init__.pyitems.py # 設置數據存儲模板,用于結構化數據,類似Django的Modelpipelines.py # 數據處理行為,如:一般結構化的數據持久化settings.py # project settings filespiders/ # a directory where you'll later put your spiders__init__.py待更新
總結
以上是生活随笔為你收集整理的scrapy框架架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NumPy基本使用
- 下一篇: BuildIt: Visual Stud