Разделите запятую разделенные элементы в списке в scrapy - PullRequest
1 голос
/ 06 мая 2019

Выпуск

Я хочу извлечь ключевые слова из следующего кода и сохранить их как отдельные элементы списка в 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"]]}

Есть идеи, как это решить? *

Ответы [ 2 ]

3 голосов
/ 06 мая 2019

Попробуйте:

>>> 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']]
0 голосов
/ 06 мая 2019

Попробуйте изменить код на,

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

добавление i.split(', ') в [] приведет к созданию отдельных массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...