我想在ElasticSearch中索引我的项目,我找到了this。
但如果我试图抓取某个网站,我会收到以下错误:
文件" /usr/lib/python2.7/dist-packages/twisted/internet/defer.py",第577行,在_runCallbacks中 current.result = callback(current.result,* args,** kw) 文件" /usr/local/lib/python2.7/dist-packages/scrapyelasticsearch/scrapyelasticsearch.py",第70行,在process_item中 self.index_item(项目) 文件" /usr/local/lib/python2.7/dist-packages/scrapyelasticsearch/scrapyelasticsearch.py",第52行,在index_item中 local_id = hashlib.sha1(item [uniq_key])。hexdigest() 文件" /home/javed/.local/lib/python2.7/site-packages/scrapy/item.py",第50行, getitem return self._values [key] exceptions.KeyError:' url'
答案 0 :(得分:2)
由于你没有粘贴你的蜘蛛代码,我只能承担一些事情。
一个假设是你没有在你的物品中设置所需的字段。他们需要在ELASTICSEARCH_UNIQ_KEY
中指定一个字段,并且必须是唯一的。最简单的方法可能是使用url
:
# somewhere deep in your callback,
# where you create and yield your item
...
myitem['url'] = response.url
return myitem
并确保在settings.py
:
ELASTICSEARCH_UNIQ_KEY = 'url'
答案 1 :(得分:0)
我只是在settings.py文件中注释了这个字段(根据official documentation,此字段是可选的)
#ELASTICSEARCH_UNIQ_KEY = 'url' # Custom unique key