> What's the purpose of returning item?

According to [scrapy docs](https://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html?highlight=pipeline#writing-your-own-item-pipeline):
> process_item(item, spider)
> This method is called for every item pipeline component and must either return a Item (or any descendant class) object or raise a DropItem exception. 

It must return an item.

See, for example, [JsonWriterPipeline](https://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html?highlight=pipeline#write-items-to-a-json-file) - it does write lines to the opened file, but, anyway, returns an item.