Най-накрая го разбрах. Проблемът не беше в кодирането. Беше със структурата на документите.
Тъй като преминах към стандартния пример на MongoPipeline, който не се занимава с вложени scrapy елементи.
Това, което правя е:BlogItem:"url"...comments =[CommentItem]
Така че моят BlogItem има списък с CommentItems. Сега проблемът дойде тук, за запазване на обекта в базата данни, което правя:
self.db[self.collection_name].insert(dict(item))
Така че тук анализирам BlogItem до dict. Но аз не анализирам списъка с CommentItems. И тъй като проследяването показва CommentItem нещо като dict, не ми хрумна, че проблемният обект не е dict!
Така че най-накрая начинът да коригирате този проблем е да промените реда при добавяне на коментара към списъка с коментари като такъв:
item['comments'].append(dict(comment))
Сега MongoDB го счита за валиден документ.
И накрая, за последната част, в която питам защо получавам изключение на конзолата на Python, а не в скрипта.
Причината е, че работех върху конзолата на Python, която поддържа само ascii. И по този начин грешката.