我无法找到问题的答案,所以我希望可以在这里提问。
我正在试图废弃电影放映,但仍然会出现以下错误。
令我感到困惑的是,问题显然在于管道问题。然而,我有第二个用于歌剧院的蜘蛛与完全相同的代码(只有地方不同),它的工作正常。"显示"和"放置"指的是我的Django模型。我已将他们的字段更改为CharFields,因此错误的日期/时间格式不会出现问题。
我还尝试使用专用的scrapy项目" KikaItem"而不是" ShowItem" (与我的歌剧蜘蛛共享)但错误仍然存在。
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
这是我的蜘蛛代码。我希望问题出在这里,因为我在这里使用的方法不同于歌剧方法。但是,我不确定会出现什么问题。
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()
感谢您的时间,并对任何拼写错误表示抱歉:)
答案 0 :(得分:2)
目前,您的蜘蛛会产生一个项目:
{'title': u' '}
没有填写date
和time
字段。这是因为您在蜘蛛中初始化ItemLoader
类的方式。
您应该在考虑特定选择器的情况下初始化项目加载器。替换:
for div in divs:
l = KikaItemLoader(item=ShowItem(), response=response)
使用:
for div in divs:
l = KikaItemLoader(item=ShowItem(), selector=div)