Ho un CrawlSpider impostare fino a seguito determinati link e raschiare una rivista in cui i collegamenti a ciascun problema seguono il seguente schema URL:Scrapy sta seguendo e raschiando maglie non consentito
http://example.com/YYYY/DDDD/index.htm dove YYYY è l'anno e DDDD è il numero di emissione a tre o quattro cifre.
Desidero solo i problemi 928 in poi e ho le mie regole di seguito. Non ho alcun problema a connettermi al sito, a strisciare link o estrapolare elementi (quindi non ho incluso il resto del mio codice). Sembra che il ragno segua determinati collegamenti non consentiti. Sta cercando di analizzare i problemi 377, 398 e altro, e segue i link "culture.htm" e "feature.htm". Questo genera molti errori e non è terribilmente importante, ma richiede un sacco di pulizia dei dati. Qualche suggerimento su cosa sta andando storto?
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: Ho risolto questo utilizzando un'espressione regolare molto più semplice fot 2009, 2010, 2011, ma io sono ancora curioso di sapere perchè quanto sopra non funziona se qualcuno ha qualche suggerimento.
Fantastic. Grazie per l'aiuto! – Trey