это распространенная ошибка при использовании xpath для вложенных селекторов.
Когда вы используете xpath для уже извлеченного селектора, если вы хотите использовать то, что вы уже извлекли, как корень для нового селектора xpath, вам нужно запустить xpath с .
. Если вы этого не сделаете, он просто будет использовать весь DOM, как обычно.
Так что просто измените последние строки на:
{
'text':quotes.xpath(".//span[@class='text']/text()").extract_first(),
'author':quotes.xpath(".//small[@class='author']/text()").extract_first(),
'tags':quotes.xpath(".//div[@class='tags']/child::a/text()").extract(),
}