Python 如何使用scrapy loader处理器实现长功能?
我开始使用项目加载器,在示例中使用mapcompose等加载器处理器来清理文本,例如:Python 如何使用scrapy loader处理器实现长功能?,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我开始使用项目加载器,在示例中使用mapcompose等加载器处理器来清理文本,例如: clean_text = Compose(MapCompose(lambda v: v.strip()), Join()) test = ['item1', 'item2', 'item3'] clean_text(test) 它返回: u'item1 item2 item3' 现在,我等待一个不同的输出,对于相同的输入,我需要用逗号分隔数据,因为我使用的是.csv文件,所以我也引用文本,以避免破坏
clean_text = Compose(MapCompose(lambda v: v.strip()), Join())
test = ['item1', 'item2', 'item3']
clean_text(test)
它返回:
u'item1 item2 item3'
现在,我等待一个不同的输出,对于相同的输入,我需要用逗号分隔数据,因为我使用的是.csv文件,所以我也引用文本,以避免破坏格式
'"""item1,item2,item3"""'
为此,我编写了以下函数:
def quote_field(text):
text = ','.join([v.strip() for v in text ])
return '"""' + text.strip() + '"""'
如何实现项目加载器 你们非常接近。
首先,您应该了解Compose
和mapcose
类Compose
用于将某些函数应用于项目列表,而mapcose
用于将某些函数应用于项目列表中的每个项目
所以你想要:
from scrapy.loader.processors import MapCompose, Compose, Join
clean_text = Compose(
MapCompose(str.strip), # strip every item in list
MapCompose(lambda item: f'"{item}"'), # wrap every value in quotes
Join(','), # join all items in list as one using , as separator
)
如果您测试它:
test = ['item1', 'item2', 'item3']
clean_text(test)
#'item1,item2,item3'
你很接近。
首先,您应该了解Compose
和mapcose
类Compose
用于将某些函数应用于项目列表,而mapcose
用于将某些函数应用于项目列表中的每个项目
所以你想要:
from scrapy.loader.processors import MapCompose, Compose, Join
clean_text = Compose(
MapCompose(str.strip), # strip every item in list
MapCompose(lambda item: f'"{item}"'), # wrap every value in quotes
Join(','), # join all items in list as one using , as separator
)
如果您测试它:
test = ['item1', 'item2', 'item3']
clean_text(test)
#'item1,item2,item3'
谢谢,但我还需要另外的引号:“'item1'、'item2'、'item3'”,因为它进入.CSVfile的on单元格。然后使用lambda func调用map compose。请参阅我的编辑。在这一点上,使用MapCompose而不是定义一个常规函数(如:quote_field)是否有意义?这完全取决于您如何构造代码库:)如果您觉得您需要此处理器之外的逻辑,那么定义一个特定函数是一个好主意!就我个人而言,我喜欢将所有处理器和处理器部件作为单独python模块中的函数,这样我就可以在不同的scrapy项目中重用它们,但这完全取决于您自己的喜好和舒适度。谢谢,但我还需要更多的引言:“item1”、“item2”、“item3”因为这会进入.CSVfile.com上的单元格,然后使用lambda func调用map compose。请参阅我的编辑。在这一点上,使用MapCompose而不是定义一个常规函数(如:quote_field)是否有意义?这完全取决于您如何构造代码库:)如果您觉得您需要此处理器之外的逻辑,那么定义一个特定函数是一个好主意!就我个人而言,我喜欢将所有处理器和处理器部件作为单独python模块中的函数,这样我就可以在不同的scrapy项目中重用它们,但这完全取决于您自己的喜好和舒适度。