Scrapy отслеживает и очищает запрещенные ссылки

У меня есть CrawlSpider, настроенный для перехода по определенным ссылкам и очистки журнала новостей, где ссылки на каждую проблему соответствуют следующей схеме URL:

http: // example.com/YYYY/DDDD/index.htm, где YYYY - год, а DDDD - трех- или четырехзначный номер выпуска.

Мне нужны только выпуски с 928 года и ниже, и мои правила приведены ниже. У меня нет проблем с подключением к сайту, сканированием ссылок или извлечением элементов (поэтому я не включил остальную часть своего кода). Паук, похоже, настроен переходить по запрещенным ссылкам. Он пытается очистить ошибки 377, 398 и другие и следует по ссылкам «culture.htm» и «feature.htm». Это вызывает множество ошибок и не очень важно, но требует большой очистки данных. Есть предложения относительно того, что происходит не так?

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', )), ),
    )

РЕДАКТИРОВАТЬ: Я исправил это, используя гораздо более простое регулярное выражение fot 2009, 2010, 2011, но мне все еще любопытно, почему это не работает, если у кого-то есть предложения.

6
задан 16 December 2011 в 18:19
поделиться