将逗号分隔的项目拆分为scrapy列表

时间:2019-05-06 11:52:36

标签: python json scrapy

问题

我想从下面的代码中提取关键字,并将它们作为单独的列表项存储在json中。

PowerShell -NoP "IpCSV .\testCSV.csv|Select * -Exc Values|EpCSV .\Modified.csv -NoT"

到目前为止,我正在使用以下代码:

<meta name="keywords" content="keyword1, keyword2, keyword3">

立即获得结果

这将导致一个如下所示的json文件:

'keywords': [i.split(', ') for i in response.xpath('//meta[@name="keywords"]/@content').extract()]

或者在原始数据中这样:

keywords:
     0:
        0: keyword1
        1: keyword2
        2: keyword3

预期结果

但是我需要将它们分开如下:

{"keywords": [["keyword1", "keyword2", "keyword3"]]}

或输入原始数据:

keywords:
     0:
        0: keyword1
     1:
        0: keyword2
     2:
        0: keyword3

有什么想法可以解决这个问题吗?*

2 个答案:

答案 0 :(得分:3)

尝试:

>>> from scrapy import Selector
>>> sel = Selector(text="""<meta name="keywords" content="keyword1, keyword2, keyword3">""")
>>> keywords = sel.xpath('//meta[@name="keywords"]/@content').get()
>>> [[i] for i in keywords.split(', ')]
[[u'keyword1'], [u'keyword2'], [u'keyword3']]

或者:

>>> [[[k] for k in i.split(', ')] for i in sel.xpath('//meta[@name="keywords"]/@content').extract()]
[[[u'keyword1'], [u'keyword2'], [u'keyword3']]]

UPD:

也许最好将逻辑分为两种情况,如下所示:

>>> keywords = []
>>> for i in sel.xpath('//meta[@name="keywords"]/@content').extract():
...     if ',' in i:
...         for k in i.split(','):
...             keywords.append([k.strip()])
...     else:
...         keywords.append([i.strip()])
... 
>>> keywords
[[u'keyword1'], [u'keyword2'], [u'keyword3']]

答案 1 :(得分:0)

尝试将代码更改为

'keywords': [[x] for x in [i.split(', ') for i in response.xpath('//meta[@name="keywords"]/@content').extract()]]

i.split(', ')中添加[]将生成单个数组。