scrapy的數據解析數據庫
在scrapy中咱們使用xpath解析到的數據都被封裝到了一個selector對象中,咱們須要的字符串數據也都封裝到這個對象中了
若是咱們能夠肯定xpath返回的列表中只有一個對象,用extract_first(),若是不是一個值,則用extract()便可.
scrapy的持久化存儲框架
scrapy的持久化存儲分爲兩種: 一種是基於終端指令的,另外一種是基於管道的 基於終端指令: 能夠將parse方法的返回值對應的數據進行本地磁盤的持久化存儲 scrapy crawl pcName -o fliePath 缺點: 侷限性較強(只能是特定的文件格式,而且數據不能存儲到數據庫中) 優勢: 便捷,簡單
基於管道:
1.數據解析
2.在item類中進行相關屬性的封裝
3.實例化一個item類型的對象
4.將解析到的數據存儲到item對象中
5.將item交給管道
6.在配置文件中開啓管道
注意事項:
爬蟲文件提交的item只會提交到第一個被執行的管道中
在管道類中的process_item方法中return item,是將item傳遞給下一個即將被執行的管道類
習慣: 在每一個process_item方法執行後都須要寫return item
進行全站數據爬取異步
手動發起get請求 yield scrapy.Request(url,callback) 手動發起post請求 yield scrapy.FormRequest(url,callback,formdata) url : 向哪一個網站發起請求 callback : 回調函數 formdata: 請求時發送的參數 若是想要將起始列表中的url進行post請求的發送,須要重寫父類中的方法 def start_requests(self): for url in self.start_urls: data={ 'name':'xixi' } yield scrapy.FormRequest(url,callback=self.parse,formdata=data)
scrapy的五大核心組件scrapy
爬蟲程序(Spider)
爬蟲是主要幹活的, 用於從特定的網頁中提取本身須要的信息, 即所謂的實體(Item)。用戶也能夠從中提取出連接,讓Scrapy繼續抓取下一個頁面
引擎(scrapy)
用來處理整個系統的數據流處理, 觸發事務(框架核心)
調度器(Scheduler)
用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 能夠想像成一個URL(抓取網頁的網址或者說是連接)的優先隊列, 由它來決定下一個要抓取的網址是什麼, 同時去除重複的網址
下載器(Downloader)
用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是創建在twisted這個高效的異步模型上的)
項目管道(Pipeline)
負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證明體的有效性、清除不須要的信息。當頁面被爬蟲解析後,將被髮送到項目管道,並通過幾個特定的次序處理數據。
執行流程:ide
1.爬蟲對象將url封裝成請求對象發送給引擎(可能有不少個請求對象) 2.引擎拿到請求對象以後,會把他傳遞給調度器,調度器中會先通過過濾器過濾掉重複的請求對象,而後將這些對象存放在隊列中 3.將隊列中的一個對象傳遞給引擎 4.引擎將對象傳遞給下載器 5.下載器經過發送請求向互聯網發送請求 6.互聯網返回給下載器數據 7.下載器將數據傳遞給引擎 8.引擎將數據傳遞給爬蟲數據,而後進行數據解析等操做 9.解析完成後,爬蟲程序將解析的數據發送給引擎. 10.引擎將數據傳遞給管道,進行數據的持久化存儲
請求傳參:函數
使用場景: 爬取的數據沒有在用一個頁面上 如何實現: 在手動發送請求時,能夠將一個字典傳遞給回調函數 yield scrapy.Resquest(url,callback,meta) callback取值meta字典值: response.meta['xxx']