有没有办法在爬行器运行时阻止某些URL

2024-05-13 23:02:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个spider,它使用scrapy框架(我正在使用crawlspider对域中的每个链接进行爬网)从给定的域中提取某些文件。我想阻止蜘蛛找不到文件的某些网址。例如,如果sider访问了一个包含/news/path的URL一百次,但没有找到一个文件,我希望它停止在/news/

我已经尝试更新自我规则变量时,它发现和路径,不产生文件,但这没有工作,它继续爬网与该路径的网址

这是我试图用来更新规则的函数

 def add_block_rule(self, match):
        new_rule = match.replace('/','\/')
        new_rule = f'/(.*{new_rule}.*)'
        if new_rule in self.deny_rules:
            return
        print(f'visted {match} to many times with out finding a file')
        self.deny_rules.append(new_rule)
        self.rules = (
            Rule( 
                LinkExtractor(
                    allow_domains=self.allowed_domains,
                    unique=True,
                    deny=self.deny_rules,),
                callback='parse_page',
                follow=True),
        )
        print(self.deny_rules)

我知道这个函数被调用时,某些路径被访问了一百次而没有找到一个文件,但是新规则没有被使用。我还知道正则表达式的工作原理是我在init中定义了一个正则表达式,它阻塞了所需的路径。你知道吗

我希望所有被访问超过100次而没有找到文件的路径都会被阻止,不再被访问


Tags: 文件函数self路径truenew规则match