结合字符串Scrapy python

时间:2017-11-13 16:28:24

标签: python json join scrapy concatenation

我有一个关于如何在使用scrapy时组合一组值以使我的json输出更清晰的问题。这就是我所拥有的:

import scrapy
from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import TakeFirst, MapCompose, Join

class LLPubs (scrapy.Spider):
    name = "linlinks"
    start_urls = [
        'http://www.linnaeuslink.org/records/record/1',
        'http://www.linnaeuslink.org/records/record/2',
        'http://www.linnaeuslink.org/records/record/2a',
        'http://www.linnaeuslink.org/records/record/10',
]

    def parse(self, response):
        for item in response.css('div.item'):
            yield {
                'text': item.css('div.field.soulsbyNo .value span::text').extract(),
                'uniformtitle': item.css('div.field.uniformTitle .value span::text').extract(),
                'title': item.css('div.field.title .value span::text').extract(),
                'opac': item.css('div.field.localControlNo .value span::text').extract(),
                'digitalcopyurl': .join(response.css('div#digitalLinks li a').xpath('@href').extract()),
                'name': response.css('div#digitalLinks li a span::text').extract(),
                }

" digitalcopyurl"是我遇到问题的地方。我想我不能使用"加入"以这种方式,但我不知道要修改什么。这是JSON现在的样子:

{"text": ["Soulsby no. 46(1)"], 
"uniformtitle": ["Systema naturae"], 
"title": ["Caroli Linnæi ... Systema naturæ\nin quo naturæ regna tria, secundum classes, ordines, genera, species, systematice proponuntur."], 
"opac": ["002178079"], 
"digitalcopyurl": ["http://books.google.co.uk/books?vid=BL:A0019621817", "http://books.google.co.uk/books?vid=BL:A0019621817", "", ""], 
"name": ["View digital version at BL", "View digital version at BL", "View digital version at NHM-LONDON", "View digital version at UUL"]},

我想要" digitalcopyurl"看起来更像:

"digitalcopyurl": ["http://books.google.co.uk/books?vid=BL:A0019621817, http://books.google.co.uk/books?vid=BL:A0019621817"], 

(我想使用相同的解决方案对" name"字段执行相同操作。)

感谢您的帮助!

编辑:示例输出不使用" .join" - 没有。

1 个答案:

答案 0 :(得分:3)

'digitalcopyurl': ", ".join(response.css('div#digitalLinks li a').xpath('@href').extract())

OR

'digitalcopyurl': ", ".join(a.strip() for a in response.css('div#digitalLinks li a').xpath('@href').extract())

两者都会做同样的事情