2017-09-11 44 views
0

我有scrapy代碼如下所示:scrapy保存不同的產量DIC在同一個JSON對象

def parse(self, response): 
    for quote in response.css('div.search-item '): 
     f = quote.css('a.stack::attr(href)').extract_first() 
     f = response.urljoin(f) 
     # print(f) 
     yield { 
      'text': quote.css('span.tags::text').extract_first(), 
      'title': quote.css('h3 em::text').extract_first(), 

      } 
     yield response.follow(f, self.parse_program) 

def parse_program(self, response): 
    def extract_with_css(query): 
     return response.css(query).extract_first().strip() 

    yield { 
     'name': extract_with_css('div.headline h1::text'),} 

結果變成是這樣的:

{'text':"sdada",'title':"12321q"} 
{'name':"sdasdsa"} 

我想讓它像:

{'text':"sdada",'title':"12321q",'name':"sdasdsa"} 

我該怎麼辦?

回答

2

您需要使用要求元對於這一點,當你把所有的數據

def parse(self, response): 
    for quote in response.css('div.search-item '): 
     f = quote.css('a.stack::attr(href)').extract_first() 
     f = response.urljoin(f) 
     # print(f) 
     data = { 
      'text': quote.css('span.tags::text').extract_first(), 
      'title': quote.css('h3 em::text').extract_first(), 

      } 
     yield response.follow(f, self.parse_program, meta={"data": data}) 

def parse_program(self, response): 
    def extract_with_css(query): 
     return response.css(query).extract_first().strip() 
    data = response.meta["data"] 
    data['name'] = extract_with_css('div.headline h1::text') 
    yield data 
+0

我正要表明這只是產量的項目。另請參見https://stackoverflow.com/questions/24651723/passing-meta-elements-through-callback-function-in-scrapy – jq170727

+0

這是非常有幫助的,謝謝 – vonschbo

+0

很高興能有所幫助,您能否將其標記爲接受的答案 –

相關問題