Python - Scrapy SgmlLinkExtractor否认值被忽略

时间:2011-12-29 23:04:10

标签: python scrapy

我正在使用Scrapy抓取http://www.investopedia.com

我的“Spider.py”文件中有一个抓取过滤器定义:

rules = (
    # Crawl filters
    Rule(SgmlLinkExtractor(deny=settings['DENY_FILTER']), callback='parse_item', follow=True, process_links='process_links'),
)
正在从“settings.py”文件中提取

设置['DENY_FILTER'] ,无论我如何格式化,抓取工具都不会过滤(或“拒绝”)我的内容问它。拒绝值如下:

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。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试传递deny个参数

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

如果您的拒绝规则有效,我认为您应该访问DENY_FILTER中定义的settings.py

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

写作:

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

另外,请显示process_links功能代码?