Enfin je l'ai compris. Le problème n'était pas avec l'encodage. C'était avec la structure des documents.
Parce que je suis parti sur l'exemple standard de MongoPipeline qui ne traite pas des éléments scrapy imbriqués.
Ce que je fais est :BlogItem:"url"...comments =[CommentItem]
Donc, mon BlogItem a une liste de CommentItems. Maintenant, le problème est venu ici, pour conserver l'objet dans la base de données, je le fais :
self.db[self.collection_name].insert(dict(item))
Donc, ici, je parse le BlogItem à un dict. Mais je n'analyse pas la liste des CommentItems. Et parce que le traceback affiche le CommentItem un peu comme un dict, il ne m'est pas venu à l'esprit que l'objet problématique n'est pas un dict !
Donc, finalement, la façon de résoudre ce problème est de changer la ligne lors de l'ajout du commentaire à la liste des commentaires en tant que tel :
item['comments'].append(dict(comment))
Désormais, MongoDB le considère comme un document valide.
Enfin, pour la dernière partie où je demande pourquoi je reçois une exception sur la console python et non dans le script.
La raison en est que je travaillais sur la console python, qui ne prend en charge que l'ascii. Et donc l'erreur.