Итак, подытожим. Рабочий вариант:
news = NewsItem(**item)
r = requests.get(news['image'])
image = path.basename(urlparse(news['image']).path)
buf = BytesIO()
buf.write(r.content)
news['image'] = File(buf, image)
Получаем респонс, извлекаем имя изображения, создаем BytesIO объект, извлекаем контент и пишем его в буф, потом берем наш объект (scrapy item, созданный с помощью django-item) и приводим его к нужному формату, передавая буф и название. Потом просто сохраняем итем\объект news.save()
Т.е. нам не хватало имя для файла