2011-12-29 73 views
0

我正在使用Scrapy抓取http://www.investopedia.comPython - Scrapy SgmlLinkExtractor拒绝值被忽略

我有一个爬过滤器定义在我的“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)) 

我一直在使用正则表达式的未编译版本无济于事也尝试:

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

我搜索了好几天互联网,都拿出了没有现在我回答你的答案StackOverflow。有任何想法吗?

回答

0

试图通过deny参数到位

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

如果你拒绝规则将工作,我想你应该访问settings.py定义为DENY_FILTER

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

通过写

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

另请参阅process_links功能码?