我正在使用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。有什么想法吗?
答案 0 :(得分:0)
尝试传递deny
个参数
Rule(SgmlLinkExtractor(deny=('regexp1', 'regexp2',),...
如果您的拒绝规则有效,我认为您应该访问DENY_FILTER
中定义的settings.py
:
DENY_FILTER = ('regexp1', 'regexp2',)
写作:
Rule(SgmlLinkExtractor(deny=settings.DENY_FILTER), ...
另外,请显示process_links
功能代码?