当前位置: 首页 > 面试题库 >

将拼凑的拼凑数据放入elasticsearch时发生TypeError

谭昱
2023-03-14
问题内容

我一直在关注本教程(http://blog.florian-hopf.de/2014/07/scrapy-and-
elasticsearch.html
)并使用这个易碎的elasticsearch管道(https://github.com/knockrentals/scrapy
-elasticsearch
),并能够将数据从scrapy提取到JSON文件,并在本地主机上启动并运行Elasticsearch服务器。

但是,当我尝试使用管道将抓取的数据发送到elasticsearch时,出现以下错误:

2015-08-05 21:21:53 [scrapy] ERROR: Error processing {'link': [u'http://www.meetup.com/Search-Meetup-Karlsruhe/events/221907250/'],
 'title': [u'Alles rund um Elasticsearch']}
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/twisted/internet/defer.py", line 588, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scrapyelasticsearch/scrapyelasticsearch.py", line 70, in process_item
    self.index_item(item)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scrapyelasticsearch/scrapyelasticsearch.py", line 52, in index_item
    local_id = hashlib.sha1(item[uniq_key]).hexdigest()
TypeError: must be string or buffer, not list

我的items.py scrapy文件看起来像这样:

from scrapy.item import Item, Field

class MeetupItem(Item):
    title = Field()
    link = Field()
    description = Field()

和(我认为只有其中的相关部分)我的settings.py文件如下所示:

from scrapy import log

ITEM_PIPELINES = [
    'scrapyelasticsearch.scrapyelasticsearch.ElasticSearchPipeline',
]

ELASTICSEARCH_SERVER = 'localhost' # If not 'localhost' prepend 'http://'
ELASTICSEARCH_PORT = 9200 # If port 80 leave blank
ELASTICSEARCH_USERNAME = ''
ELASTICSEARCH_PASSWORD = ''
ELASTICSEARCH_INDEX = 'meetups'
ELASTICSEARCH_TYPE = 'meetup'
ELASTICSEARCH_UNIQ_KEY = 'link'
ELASTICSEARCH_LOG_LEVEL= log.DEBUG

任何帮助将不胜感激!


问题答案:

如您在错误消息中所看到的:Error processing {'link': [u'http://www.meetup.com/Search- Meetup-Karlsruhe/events/221907250/'], 'title': [u'Alles rund um Elasticsearch']}您的项目linktitle字段是列表(值周围的方括号表明了这一点)。

这是因为您在Scrapy中进行了提取。您没有在问题中发布它,但应该使用它response.xpath().extract()[0]来获得列表的第一个结果。当然,在这种情况下,您应该准备遇到空结果集,以避免索引错误。

更新资料

对于不提取任何内容的情况,可以使用以下方法进行准备:

linkSelection = response.xpath().extract()
item['link'] = linkSelection[0] if linkSelection else ""

或类似的东西取决于您的数据和字段。None如果列表为空,可能也有效。

基本思想是拆分XPath提取和列表项选择。如果项目包含必需的元素,则应从列表中选择一个项目。



 类似资料:
  • 问题内容: 我有一个表,其数据对的建模如下: 然后总是更大。这些对表示要进行的替换。因此,将100替换为50,然后将50替换为40,然后将其替换为10。 因此结果将是这样的: 有没有一种我可以更改或加入此表来表示的简洁方法? 我知道我可以自己加入类似于以下内容的内容: 但是,这需要多次通过,因此,为什么我问是否有更好的方法来完成它? 问题答案: 结果:

  • 问题内容: 我正在阅读最近发布的The Go Programming Language ,到目前为止,这是一件令人高兴的事情(Brian Kernighan是其中的一位作者,无论如何我都不会期待别的什么)。 我在第3章遇到了以下练习: 练习3.13尽可能紧凑地通过YB 编写KB,MB的声明。 ( 注 :在此上下文中,KB,MB等表示1000的幂) 在此之前有一节,其中介绍了一种有用的常量生成器机制

  • 我尝试创建一个使用压缩和删除的Kafka主题配置,以实现以下目标: 在保留期限内,保留密钥的最新版本 在保留期之后,要删除的任何早于时间戳的消息 当我在测试中将其设置为较小的量时,例如20mins、1hr等,我可以正确地看到数据在保留期后被修剪,只需调整主题上的。 我可以看到数据正按照预期的那样被正确压缩,但是如果我从一开始就阅读主题,那么在10天的保留期之后,比10天早得多的数据仍然存在。这么长

  • 我试图做一些非常简单的事情,我有一些非常愚蠢的挣扎。我想这一定与对火花的基本误解有关。我非常感谢任何帮助或解释。 我有一张非常大的桌子(~3 TB,~300毫米行,25k个分区),在s3中保存为拼花地板,我想给一些人一个很小的拼花文件样本。不幸的是,这要花很长时间才能完成,我不明白为什么。我尝试了以下方法: 然后当这不起作用时,我尝试了这个,我认为应该是一样的,但我不确定。(我添加了,以尝试调试。

  • 我有一个带有MongoDB的Nodejs应用程序。现在我想使用Elasticsearch将数据从mongo复制到Elasticsearch。我正在使用npm软件包“ElasticSearch”。例如,对于收藏“帖子”,我有这样的: 正如您所看到的,我的数据是非结构化的,并且Elasticsearch在我添加这些项时显示了错误。我想要一个把戏关闭弹性搜索限制,允许我添加这些数据。我不能改变我的数据它

  • 我有一个很大的数据框,我正在HDFS中写入拼花文件。从日志中获取以下异常: 谷歌对此进行了搜索,但找不到任何具体的解决方案。将推测设置为false:conf.Set(“spark.投机”,“false”) 但仍然没有帮助。它只完成了几个任务,生成了几个零件文件,然后突然因此错误而停止。 详细信息:Spark版本:2.3.1(这在1.6x中没有发生) 只有一个会话正在运行,这排除了不同会话访问同一位