bueno pues ya lo resolvi. el problema fue que tenia mal mi regla ya que mi regla era global
Rule(LinkExtractor(allow=r'page/'),callback = 'parse', follow=True ),
y buscaba todo lo que tuviera /page pero yo solo queria lo que fuera asi
http://quotes.toscrape.com/page/2/y no
http://quotes.toscrape.com/tag/love/page/1/ ya que esta forma es dominio + subcarpeta + page/ y no me servia ya que lo correcto para mi ejemplo es dominio/+page/1,2,3,4,5,6,7,8,9,10 (cada una de esa es un page/2 page/3 page/4 etc)
a si que lo que hice fue cambiar mi regla (allow=r'page/') por .com/page/ y asi, si se trai esto solamente
http://quotes.toscrape.com/page/2/ porque se cumple .com + page/1,2,3,4 etc. y esta ya no se cumple .com/subcarpeta/subcarpeta/page/1
a si que al final quedo
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class WitsiSpider(CrawlSpider):
name = 'witsi'
allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com/page/1/']
base_url = 'http://quotes.toscrape.com/page/1/'
rules = (
Rule(LinkExtractor(allow=r'.com/page/'),callback = 'parse', follow=True ),
)
def parse(self, response):
citas = response.xpath('//*[@class="quote"]')
for cita in citas:
texto = cita.xpath('.//span[@class="text"]/text()').extract_first()
autor = cita.xpath('.//*[@class="author"]/text()').extract_first()
palabras_claves = cita.xpath('.//*[@itemprop="keywords"]/@content').extract_first()
yield{ 'Texto' : texto,
'Autor' : autor,
'Palabras Claves' : palabras_claves }
gracias a todos por su ayuda