scrapy參數meta傳遞item的用法,結合deepcopy來理解

scrapy.Request(url[,callback,method="GET",headers,body,cookies,meta,dont_filter=False])
 
參數meta說明:
        1)meta是一個字典,主要用於解析函數之間傳遞值;
        2)Request對象接受一個meta參數,即一個字典對象,同時Response對象有一個meta屬性能夠取到相應request傳過來的meta;
        即:一方傳遞,另外一方接收
 
 
問題:
meta傳遞值,有時候當前爬蟲解析出來的數據須要重複抓取,獲取到的值有時須要傳遞給下一個函數
可是 items= response.meta['item'] 接收的時候一直是一樣的值
 
解決:
在yield的時候,meta參數的值作深度拷貝就能夠了

 

yield scrapy.Request(detail_url,
                    callback=self.next_page,
                    meta={'item': deepcopy(item)})
 
 
結合代碼說明爲何爬取圖書數據重複時須要deepcopy?    -----這裏省略代碼,理解用法便可
 
- a = deepcopy(b)      # 至關於強制傳值
      - scrapy中的內容是異步執行的,解析函數可能同時在執行,操做的是同一個item,
      - 大分類下的全部的圖書用的是一個item字典
 
 
補充:
      copy與deepcopy區別:
        個人理解是:copy 至關於一個替身,只是表面的假象,真主換動做了替身也要隨着變;
                             deepcopy 看成一對雙胞胎,雖然類似,但其實是各自獨立的特徵
                                               
       放上一個其餘人總結的比較詳細的連接做參考: https://www.jianshu.com/p/dd839e1d4144
相關文章
相關標籤/搜索