scrapy 项目加载器返回列表不是单个值
Posted
技术标签:
【中文标题】scrapy 项目加载器返回列表不是单个值【英文标题】:scrapy item loader return list not single value 【发布时间】:2014-07-16 15:28:37 【问题描述】:我正在使用scrapy 0.20。
我想使用物品加载器
这是我的代码:
l = XPathItemLoader(item=MyItemClass(), response=response)
l.add_value('url', response.url)
l.add_xpath('title',"my xpath")
l.add_xpath('developer', "my xpath")
return l.load_item()
我在 json 文件中得到了结果。 url
是一个列表。 title
是一个列表。 developer
是一个列表。
如何提取单个值而不是列表?
我应该为此创建一个项目管道吗?我希望有更快的方法
【问题讨论】:
【参考方案1】:您需要设置一个Input or Output processor。 TakeFirst
在您的情况下可以完美运行。
您可以在多个地方定义它,例如在Item
定义中:
from scrapy.item import Item, Field
from scrapy.loader.processors import TakeFirst
class MyItem(Item):
url = Field(output_processor=TakeFirst())
title = Field(output_processor=TakeFirst())
developer = Field(output_processor=TakeFirst())
或者,在XpathItemLoader()
实例上设置default_output_processor
:
l.default_output_processor = TakeFirst()
【讨论】:
优秀。 +1 一旦系统允许,我将接受。但是请问您提供的两种方式有什么区别? 另外,如果列表为空,是否有类似的方法来设置输出?因为现在我将null
作为空属性的值。例如,某些页面没有title
属性,不是我得到nul
,而是在我刚刚得到""
之前
@MarcoDinatsoli 好吧,说到区别,Declaring Input and Output Processors
解释了输入和输出处理器的优先级。 Item
类字段可以被多个加载器重用,并且哪个加载器可以有自己的方式来呈现爬取的数据。我会在加载程序上定义处理器,而不是在你的情况下的项目字段上。
@MarcoDinatsoli 尝试使用Join
而不是TakeFirst
,但请确保列表中只有一个值。
你能在这里检查我的问题吗***.com/questions/24109713/…以上是关于scrapy 项目加载器返回列表不是单个值的主要内容,如果未能解决你的问题,请参考以下文章
当带有 extract() 的 Scrapy 选择器返回 None 时如何设置默认值?
如何使用 Java lambda 遍历列表映射并返回单个值? [复制]
Hibernate query.list() 方法返回空列表而不是空值
html 使用AJAX POST请求来调用控制器操作(在页面加载时和在下拉列表中选择项目时),获取返回的布尔值,设置observabl