2011-12-29 2 views
0

Я использую Scrapy для обхода http://www.investopedia.com.Python - Scrapy SgmlLinkExtractor Deny Value Is Is Ignored

У меня есть определение фильтра ползать в моем файле «Spider.py»:

rules = (
    # Crawl filters 
    Rule(SgmlLinkExtractor(deny=settings['DENY_FILTER']), callback='parse_item', follow=True, process_links='process_links'), 
) 

настройки [ «DENY_FILTER»] не тянет из файла «settings.py» и как бы я ни отформатировать его, искатель не будет фильтровать (или «отрицать») то, о чем я прошу. Запрещающие следующие значения:

DENY_FILTER  = (re.compile('((?!(\?|&)page=(\d)+)\?.*)', re.I), re.compile('/markets/stocks/', re.I), re.compile('/errorpage/', re.I)) 

Я также попытался использовать неоткомпилированную версию Regex но безрезультатно:

DENY_FILTER  = ('((?!(\?|&)(p|P)age=(\d)+)\?.*)', '/markets/stocks/', '/(e|E)rror(p|P)age/') 

Я искал в Интернете в течение нескольких дней и не придумал нет ответы, поэтому теперь я обращаюсь к вам в StackOverflow. Есть идеи?

ответ

0

пытаются передать deny аргументы вместо

Rule(SgmlLinkExtractor(deny=('regexp1', 'regexp2',),... 

Если отрицающие правила будут работать, я думаю, вы должны получить доступ к DENY_FILTER определяется в settings.py как:

DENY_FILTER = ('regexp1', 'regexp2',) 

написав:

Rule(SgmlLinkExtractor(deny=settings.DENY_FILTER), ... 

Также, пожалуйста, показать process_links функциональный код?