he puesto un CrawlSpider hasta siguientes ciertos enlaces y raspar una revista de noticias, donde los enlaces a cada tema siguen el siguiente esquema URL:Scrapy está siguiendo y raspando enlaces no permitidos
http://example.com/YYYY/DDDD/index.htm donde AAAA es el año y DDDD es el número de emisión de tres o cuatro dígitos.
Solo quiero que surjan los problemas 928 en adelante, y tengo mis reglas a continuación. No tengo ningún problema para conectarme al sitio, rastrear enlaces o extraer elementos (por lo que no incluí el resto de mi código). La araña parece decidida a seguir enlaces no permitidos. Está tratando de resolver los problemas 377, 398 y más, y sigue los enlaces "culture.htm" y "feature.htm". Esto arroja muchos errores y no es terriblemente importante, pero requiere mucha limpieza de los datos. ¿Alguna sugerencia sobre qué está pasando mal?
class crawlerNameSpider(CrawlSpider):
name = 'crawler'
allowed_domains = ["example.com"]
start_urls = ["http://example.com/issues.htm"]
rules = (
Rule(SgmlLinkExtractor(allow = ('\d\d\d\d/(92[8-9]|9[3-9][0-9]|\d\d\d\d)/index\.htm',)), follow = True),
Rule(SgmlLinkExtractor(allow = ('fr[0-9].htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('eg[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('ec[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('op[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('sc[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('re[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('in[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(deny = ('culture.htm',)),),
Rule(SgmlLinkExtractor(deny = ('feature.htm',)),),
)
EDIT: He fijado esta usando una expresión regular mucho más simple fot 2009, 2010, 2011, pero todavía estoy curioso por qué el anterior no funciona si alguien tiene alguna sugerencia.
fantástico. ¡Gracias por la ayuda! – Trey