1
У меня есть некоторые сохраненные результаты в .json файл в этом формате:капают повторяющееся значение элемента в трубопроводе Scrapy
(один пункт в каждой строке)
{"category": ["ctg1"], "pages": 3, "websites": ["x1.com","x2.com","x5.com"]}
{"category": ["ctg2"], "pages": 2, "websites": ["x1.com", "d4.com"]}
.
.
Я попытался удалить повторяющееся значение без удаляя весь элемент, но безуспешно.
код:
import scrapy
import json
import codecs
from scrapy.exceptions import DropItem
class ResultPipeline(object):
def __init__(self):
self.ids_seen = set()
self.file = codecs.open('results.json', 'w', encoding='utf-8')
def process_item(self, item, spider):
for sites in item['websites']:
if sites in self.ids_seen:
raise DropItem("Duplicate item found: %s" % sites)
else:
self.ids_seen.add(sites)
line = json.dumps(dict(item), ensure_ascii=False) + "\n"
self.file.write(line)
return item
def spider_closed(self, spider):
self.file.close()
Вы не можете удалить его в цикле 'для сайтов в элементе '. Вы можете создать список дубликатов и удалить его за пределами этого цикла. В качестве альтернативы вы можете сделать свой «веб-сайт» контейнером 'set' вместо' list'. Вы можете использовать 'OrderedDicst', как показано здесь: http://stackoverflow.com/questions/12878833/python-unique-list-using-set –
Все еще ничего. Я пробовал все ссылки. Я считаю, что достичь этого невозможно, возможно, мне нужно попробовать что-то другое. Однако ваш ответ был полезен, хотя, спасибо. – CodeCraft