为什么'返回'在scrapy打印这么多次

时间:2016-11-03 09:42:19

标签: python scrapy web-crawler scrapy-spider

在命令行中运行spider时,它会重复返回这么多时间。当我添加代码'项目['我是'] = i'在' items.append(item)'之前,结果是最后一个数字,并在同一时间重复。

所以这可能是使用return的问题。什么是正确的?



# -*- coding: utf-8 -*-
from a.items import Item
from scrapy.selector import Selector
import scrapy
import json

class ASpider(scrapy.Spider):
	name = "A"
	allowed_domains = ["a.com"]
	start_urls = []
	start_urls.append("a.com")
	def parse(self, response):
		jsonresponse = json.loads(response.body_as_unicode())
		items = []
		item = aItem()
		item['a_id'] = response.url[120:-51]
		item['a_nights'] = jsonresponse['calendar_months'][0]['condition_ranges'][0]['conditions']['min_nights']
		for i in range(0,len(jsonresponse['calendar_months'][0]['days'])):
			item['{}'.format(jsonresponse['calendar_months'][0]['days'][i]['date'])] = jsonresponse['calendar_months'][0]['days'][i]['available']
			items.append(item)
		return items




1 个答案:

答案 0 :(得分:0)

您需要为每一天创建一个新项目。

如果您不是仅仅使用每天的值更新该项目,那么只有最后一天的值保留一个包含对同一项目的多个引用的项目列表。这正是你所描述的那样。

def parse(self, response):
    jsonresponse = json.loads(response.body_as_unicode())
    items = []
    for day in jsonresponse['calendar_months'][0]['days']:
        item = Item()
        item['a_id'] = response.url[120:-51]
        item['a_nights'] = jsonresponse['calendar_months'][0]['condition_ranges'][0]['conditions']['min_nights']
        item['{}'.format(day['date'])] = day['available']
        items.append(item)
    return items

考虑使用上面的for循环,尽可能不编制索引。