scrapy 遞歸爬取如何傳遞參數,且解決循環yield時總是得到最後一個數據

我們寫爬蟲的時候經常會遇到比如一頁有20個產品,但是還需要進入單個產品裏面爬取更詳細的信息,這裏就涉及到如何傳遞參數才能匹配好各個產品的信息,這裏就引出scrapy中 request的meta參數,該參數只接受字典形式

meta={'k1':v1,'k2':v2}

用法如下

def parse(self, response):
    items = ScrapytestItem()
    items['name'] = 'csdn'
    href = href_domains + item.css('......').extract_first()

    yield Request(
        url=href,
        callback=self.parse_details,
        meta={'items': items},
    )
def parse_details(self, response):
    items2 = response.meta['items']

這樣,items2裏面就有了parse裏面的items['name']參數

有時候需要循環遍歷yield,但是發現傳的參數總是最後一個值,原來meta是淺拷貝,此時我們需要深拷貝

import copy
meta={'items': copy.deepcopy(items)}

這樣,就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章