Python 如何将多个已删除的项目合并为一个?(发痒的)

Python 如何将多个已删除的项目合并为一个?(发痒的),python,web-scraping,css-selectors,scrapy,Python,Web Scraping,Css Selectors,Scrapy,假设我想使用选择器刮取文本 response.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)') 从中,我得到了项目列表 [u'My image 1', u'My image 2', u'My image 3', u'My image 4', u'My image 5'] 如何合并此列表中的内容,使其显示为以破折号分隔的单行 [u'My image 1 - My image 2 - My image

假设我想使用选择器刮取文本

response.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)')
从中,我得到了项目列表

 [u'My image 1',
 u'My image 2',
 u'My image 3',
 u'My image 4',
 u'My image 5']
如何合并此列表中的内容,使其显示为以破折号分隔的单行

 [u'My image 1 - My image 2 - My image 3 - My image 4 - My image 5']
我在python中有一些forloop?或者,当我从.json文件中提取数据时,我必须手动连接每个文件吗


如果您需要任何澄清,请让我知道

您应该使用所谓的
ItemLoader
()。基本上,这允许您在将数据放入
项之前对其执行其他操作。使用您的示例URL查看以下代码:

from scrapy.item import Item, Field
from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import Join

class FooItem(Item):
    images = Field()

class FooLoader(ItemLoader):
    images_out = Join(' - ')
然后,在spider/crawler的
parse()方法中:

# get the data
sel = Selector(response)
data = sel.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)')

# load the data and yield an item
my_loader = FooLoader(item=FooItem())
my_loader.add_value('images', data)  # should be the list of strings in your example
yield my_loader.load_item()
以下是您应该看到的输出:

{'images': u'My image 1  - My image 2  - My image 3  - My image 4  - My image 5 '}
这样做的原因是
ItemLoader
类对类中的每个字段都接受所谓的
处理器。常见的是
TakeFirst
(获取第一个匹配的值)和
Join
(使用提供的字符串或默认情况下的空格连接多个值)。还有其他的,比如
mapcomose
Identity
,您也可以构建自己的。您只需指定字段名和“\u in”或“\u out”,具体取决于您计划使用的处理器类型(输入或输出)。在本例中,我将加载程序的字段命名为
images\u out
,因为我希望在返回(输出)带有
Join
的值后处理FooItem的
images
字段


最后,您可能计划生成一个项,因此ItemLoader的
load\u item()
方法只是:返回一个项。

您应该使用所谓的
ItemLoader
()。基本上,这允许您在将数据放入
项之前对其执行其他操作。使用您的示例URL查看以下代码:

from scrapy.item import Item, Field
from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import Join

class FooItem(Item):
    images = Field()

class FooLoader(ItemLoader):
    images_out = Join(' - ')
然后,在spider/crawler的
parse()方法中:

# get the data
sel = Selector(response)
data = sel.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)')

# load the data and yield an item
my_loader = FooLoader(item=FooItem())
my_loader.add_value('images', data)  # should be the list of strings in your example
yield my_loader.load_item()
以下是您应该看到的输出:

{'images': u'My image 1  - My image 2  - My image 3  - My image 4  - My image 5 '}
这样做的原因是
ItemLoader
类对类中的每个字段都接受所谓的
处理器。常见的是
TakeFirst
(获取第一个匹配的值)和
Join
(使用提供的字符串或默认情况下的空格连接多个值)。还有其他的,比如
mapcomose
Identity
,您也可以构建自己的。您只需指定字段名和“\u in”或“\u out”,具体取决于您计划使用的处理器类型(输入或输出)。在本例中,我将加载程序的字段命名为
images\u out
,因为我希望在返回(输出)带有
Join
的值后处理FooItem的
images
字段


最后,您可能计划生成一个项,因此ItemLoader的
load\u item()
方法只是:返回一个项。

您应该使用所谓的
ItemLoader
()。基本上,这允许您在将数据放入
项之前对其执行其他操作。使用您的示例URL查看以下代码:

from scrapy.item import Item, Field
from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import Join

class FooItem(Item):
    images = Field()

class FooLoader(ItemLoader):
    images_out = Join(' - ')
然后,在spider/crawler的
parse()方法中:

# get the data
sel = Selector(response)
data = sel.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)')

# load the data and yield an item
my_loader = FooLoader(item=FooItem())
my_loader.add_value('images', data)  # should be the list of strings in your example
yield my_loader.load_item()
以下是您应该看到的输出:

{'images': u'My image 1  - My image 2  - My image 3  - My image 4  - My image 5 '}
这样做的原因是
ItemLoader
类对类中的每个字段都接受所谓的
处理器。常见的是
TakeFirst
(获取第一个匹配的值)和
Join
(使用提供的字符串或默认情况下的空格连接多个值)。还有其他的,比如
mapcomose
Identity
,您也可以构建自己的。您只需指定字段名和“\u in”或“\u out”,具体取决于您计划使用的处理器类型(输入或输出)。在本例中,我将加载程序的字段命名为
images\u out
,因为我希望在返回(输出)带有
Join
的值后处理FooItem的
images
字段


最后,您可能计划生成一个项,因此ItemLoader的
load\u item()
方法只是:返回一个项。

您应该使用所谓的
ItemLoader
()。基本上,这允许您在将数据放入
项之前对其执行其他操作。使用您的示例URL查看以下代码:

from scrapy.item import Item, Field
from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import Join

class FooItem(Item):
    images = Field()

class FooLoader(ItemLoader):
    images_out = Join(' - ')
然后,在spider/crawler的
parse()方法中:

# get the data
sel = Selector(response)
data = sel.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)')

# load the data and yield an item
my_loader = FooLoader(item=FooItem())
my_loader.add_value('images', data)  # should be the list of strings in your example
yield my_loader.load_item()
以下是您应该看到的输出:

{'images': u'My image 1  - My image 2  - My image 3  - My image 4  - My image 5 '}
这样做的原因是
ItemLoader
类对类中的每个字段都接受所谓的
处理器。常见的是
TakeFirst
(获取第一个匹配的值)和
Join
(使用提供的字符串或默认情况下的空格连接多个值)。还有其他的,比如
mapcomose
Identity
,您也可以构建自己的。您只需指定字段名和“\u in”或“\u out”,具体取决于您计划使用的处理器类型(输入或输出)。在本例中,我将加载程序的字段命名为
images\u out
,因为我希望在返回(输出)带有
Join
的值后处理FooItem的
images
字段

最后,您可能计划生成一个项,因此ItemLoader的
load\u item()
方法只执行以下操作:返回一个项