【发布时间】:2018-03-19 01:14:33
【问题描述】:
我是 python 和 scrapy 的新手,所以我提前为可能愚蠢的问题道歉。我在使用默认项目加载器的处理器和相关问题时遇到了一些问题:
-
我使用 default_input_processor 变量从使用 TakeFirst() 处理器的列表中提取第一个值,如下所示:
class CaseLoader(scrapy.loader.ItemLoader): default_input_processor = TakeFirst()及用法:
def load_row_data(self, row): cl = CaseLoader(CaseItem(), row) cl.add_xpath('case_num', './/td[1]/a/text()') cl.add_xpath('case_link', './/td[1]/a/@href') cl.add_xpath('name', './/td[3]/text()') return cl.load_item()然后我从回调方法产生这个项目,但是 TakeFirst() 不起作用,我得到一个列表而不是字符串。如果我使用 TakeFist() 作为 default_output_processor,它可以工作。 default_input_processor 是如何工作的?为什么在这种情况下不应用 TakeFisrt() 处理器?
-
在documentation我看到了unicode.strip方法的用法:
from scrapy.loader import ItemLoader from scrapy.loader.processors import TakeFirst, MapCompose, Join class ProductLoader(ItemLoader): default_output_processor = TakeFirst() name_in = MapCompose(unicode.title) name_out = Join() rice_in = MapCompose(unicode.strip) # ...但是当我尝试在 Compose() 中的项目加载器中使用它时,我得到了错误:
NameError: name 'unicode' is not defined如果我理解正确,此方法应从字符串的开头和结尾删除空格。如何正确使用?我需要编写代码并使用我的 strip 函数吗?
【问题讨论】: