今日語:心空,望望遠方的高樓;心屬,依然停留python
1.用scrapy框架的時候,必定要先明白執行的順序,代碼已寫好,程序開始運行~json
2.SPIDERS的yeild將request發送給ENGIN架構
3. ENGINE對request不作任何處理髮送給SCHEDULER框架
4. SCHEDULER( url調度器),生成request交給ENGINscrapy
5. ENGINE拿到request,經過MIDDLEWARE進行層層過濾發送給DOWNLOADERide
6. DOWNLOADER在網上獲取到response數據以後,又通過MIDDLEWARE進行層層過濾發送給ENGIN函數
7. ENGINE獲取到response數據以後,返回給SPIDERS,SPIDERS的parse()方法對獲取到的response數據進行處理,解析出items或者requests網站
8. 將解析出來的items或者requests發送給ENGINui
9. ENGIN獲取到items或者requests,將items發送給ITEMPIPELINES,將requests發送SCHEDULER 注意!只有當調度器中不存在任何request了,整個程序纔會中止,(也就是說,對於下載失敗的URL,Scrapy也會從新下載。)編碼
from scrapy import cmdline cmdline.execute("scrapy crawl 項目名".split())
json格式,默認爲Unicode編碼
scrapy crawl Atguigu -o 項目名.json
json lines格式,默認爲Unicode編碼
scrapy crawl Atguigu -o 項目名.jsonlines
csv 逗號表達式,可用Excel打開
scrapy crawl Atguigu -o 項目名.csv
xml格式
scrapy crawl Atguigu -o 項目名.xml
1.由於使用的yield,而不是return。parse函數將會被當作一個生成器使用。scrapy會逐一獲取parse方法中生成的結果,並判斷該結果是一個什麼樣的類型; 2.若是是request則加入爬取隊列,若是是item類型則使用pipeline處理,其餘類型則返回錯誤信息。 3.scrapy取到第一部分的request不會立馬就去發送這個request,只是把這個request放到隊列裏,而後接着從生成器裏獲取; 4.取盡第一部分的request,而後再獲取第二部分的item,取到item了,就會放到對應的pipeline裏處理; 5.parse()方法做爲回調函數(callback)賦值給了Request,指定parse()方法來處理這些請求 scrapy.Request(url, callback=self.parse) Request對象通過調度,執行生成 scrapy.http.response()的響應對象,並送回給parse()方法,直到調度器中沒有Request(遞歸的思路) 6.取盡以後,parse()工做結束,引擎再根據隊列和pipelines中的內容去執行相應的操做; 7.程序在取得各個頁面的items前,會先處理完以前全部的request隊列裏的請求,而後再提取items。 8.這一切的一切,Scrapy引擎和調度器將負責到底。
有興趣關注個公衆號唄~