问题
我希望从下面的代码中提取关键字,并将它们作为分隔的列表项存储在json中。
<meta name="keywords" content="keyword1, keyword2, keyword3">到目前为止,我使用了以下代码:
'keywords': [i.split(', ') for i in response.xpath('//meta[@name="keywords"]/@content').extract()]现在的结果
这将导致json文件如下所示:
keywords:
0:
0: keyword1
1: keyword2
2: keyword3或者在这样的原始数据中:
{"keywords": [["keyword1", "keyword2", "keyword3"]]}预期结果
但我需要他们分开如下:
keywords:
0:
0: keyword1
1:
0: keyword2
2:
0: keyword3或者输入原始数据:
{"keywords": [["keyword1"], ["keyword2"], ["keyword3"]]}有什么办法解决这个问题吗?*
发布于 2019-05-06 12:01:05
尝试:
>>> 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']]发布于 2019-05-06 12:03:57
尝试将代码更改为,
'keywords': [[x] for x in [i.split(', ') for i in response.xpath('//meta[@name="keywords"]/@content').extract()]]在i.split(', ')中添加[]将生成单独的数组。
https://stackoverflow.com/questions/56004678
复制相似问题