处理时 Scrapy KeyError

Scrapy KeyError while processing

我找不到我的问题的任何答案,所以我希望可以在这里提问。

我正在尝试取消电影放映,但仍然出现以下错误。

真正让我感到困惑的是,问题显然出在管道上。但是,我有第二个用于歌剧院的蜘蛛,其代码完全相同(只是地方不同)并且工作正常。"Shows" 和 "Place" 指的是我的 Django 模型。我已将它们的字段更改为 CharFields,因此 date/time 格式错误不是问题。

我也尝试使用专用的 scrapy item "KikaItem" 而不是 "ShowItem"(与我的 opera spider 共享),但错误仍然存​​在。

class ScrapyKika(object):
    def process_item(self, ShowItem, spider):
        place, created = Place.objects.get_or_create(name="kino kika")

        show = Shows.objects.update_or_create(
            time=ShowItem["time"],
            date=ShowItem["date"],
            place=place,
            defaults={'title': ShowItem["title"]}
        )

        return ShowItem

这是我的蜘蛛 code.I 预计问题出在此处,因为我在这里使用的方法与歌剧中的不同。但是,我不确定有什么问题。

import scrapy
from ..items import ShowItem, KikaItemLoader

class KikaSpider(scrapy.Spider):
    name = "kika"
    allowed_domains = ["http://www.kinokika.pl/dk.php"]
    start_urls = [
        "http://www.kinokika.pl/dk.php"


    ]
    def parse(self, response):
        divs = response.xpath('//b')
        for div in divs:
            l = KikaItemLoader(item=ShowItem(), response=response)
            l.add_xpath("title", "./text()")
            l.add_xpath("date", "./ancestor::ul[1]/preceding-sibling::h2[1]/text()")
            l.add_xpath("time", "./preceding-sibling::small[1]/text()")
            return l.load_item()

ItemLoader

class KikaItemLoader(ItemLoader):
    title_in = MapCompose(strip_string,lowercase)
    title_out = Join()

    time_in = MapCompose(strip_string)
    time_out = Join()

    date_in = MapCompose(strip_string)
    date_out = Join()

感谢您的宝贵时间,如有任何拼写错误,我们深表歉意:)

目前,您的蜘蛛生成了一个项目:

{'title': u'  '}

未填写 datetime 字段。这是因为您在蜘蛛中初始化 ItemLoader class 的方式。

您应该在初始化项目加载器时考虑到特定的选择器。替换:

for div in divs:
    l = KikaItemLoader(item=ShowItem(), response=response)

与:

for div in divs:
    l = KikaItemLoader(item=ShowItem(), selector=div)