2014-01-08 3 views
0

У меня есть следующие правилаScrapy пропускает мои запрещающие правила

Rule(SgmlLinkExtractor(allow=r'.*?', deny=r'/preferences')), 
    Rule(SgmlLinkExtractor(allow=r'.*?', deny=r'/auth')),follow=True), 

Но я вижу следующее в журналах. Я также пробовал это без allow = и это все равно. Нужно ли игнорировать эти URL-адреса из промежуточного программного обеспечения?

014-01-08 21: 31: 07 + 0100 [mybot] ОТЛАДКА: просканированных (200) http://mydomain.com/preferences/language?continue_to=xxxxx> (реферер: http://mydomain.com/categories/something-something-something)

ответ

0

от Scrapy docs:

Если несколько правил соответствуют по той же ссылке, будет использоваться первый один, в соответствии с порядком, они определены в этом атрибуте.

Таким образом, вы соответствуете любому URL-адресу в том или ином правиле. Просто включать все запрещающие правила в одном:

Rule(SgmlLinkExtractor(deny = (r'\/preferences', r'\/auth'))) 

Несколько заметок:

  • Запретить правила регулярных выражений модели, так что вы должны использовать \/.
  • Матчи сделаны по абсолютному URL, так что я бы приставкой модели с доменным именем, как http:\/\/mydomain.com\/preferences
  • follow = True если вы не используете callback в Rule
Смежные вопросы