首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在scrapy中将逗号分隔的项拆分为列表

在scrapy中将逗号分隔的项拆分为列表
EN

Stack Overflow用户
提问于 2019-05-06 11:52:35
回答 2查看 444关注 0票数 1

问题

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

代码语言:javascript
复制
<meta name="keywords" content="keyword1, keyword2, keyword3">

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

代码语言:javascript
复制
'keywords': [i.split(', ') for i in response.xpath('//meta[@name="keywords"]/@content').extract()]

现在的结果

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

代码语言:javascript
复制
keywords:
     0:
        0: keyword1
        1: keyword2
        2: keyword3

或者在这样的原始数据中:

代码语言:javascript
复制
{"keywords": [["keyword1", "keyword2", "keyword3"]]}

预期结果

但我需要他们分开如下:

代码语言:javascript
复制
keywords:
     0:
        0: keyword1
     1:
        0: keyword2
     2:
        0: keyword3

或者输入原始数据:

代码语言:javascript
复制
{"keywords": [["keyword1"], ["keyword2"], ["keyword3"]]}

有什么办法解决这个问题吗?*

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-06 12:01:05

尝试:

代码语言:javascript
复制
>>> 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']]

或者:

代码语言:javascript
复制
>>> [[[k] for k in i.split(', ')] for i in sel.xpath('//meta[@name="keywords"]/@content').extract()]
[[[u'keyword1'], [u'keyword2'], [u'keyword3']]]

UPD:

也许在两种情况下更好地分割逻辑,比如:

代码语言:javascript
复制
>>> 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']]
票数 3
EN

Stack Overflow用户

发布于 2019-05-06 12:03:57

尝试将代码更改为,

代码语言:javascript
复制
'keywords': [[x] for x in [i.split(', ') for i in response.xpath('//meta[@name="keywords"]/@content').extract()]]

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56004678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档