Scrapy忽略了拒绝规则

时间:2020-07-16 10:40:26

标签: python scrapy

作为scrapy和python的新手,我正在努力解决我的Crawl Spider的拒绝规则。我想过滤目标页面上的所有URL,这些URL包含单词“ versicherung”和double? URL的任何部分中的结构。但是,scrapy忽略了我的规则。谁能告诉我语法有什么问题(我已经尝试过在*之前加上“”,但这也不起作用)?

规则:

rules = [Rule(LinkExtractor(deny=r'\*versicher\*', r\'*\?*\?\*',),
            callback='parse_norisbank', follow=True)]

日志:

DEBUG: Crawled (200) <GET https://www.norisbank.de/produkte/versicherungen/rechtsschutzversicherung.html> (referer: https://www.norisbank.de)
DEBUG: Crawled (200) <GET https://www.norisbank.de/produkte/versicherungen/haftpflichtversicherung.html> (referer: https://www.norisbank.de)
DEBUG: Crawled (200) <GET https://www.norisbank.de/produkte/versicherungen/hausratversicherung.html> (referer: https://www.norisbank.de)
DEBUG: Crawled (200) <GET https://www.norisbank.de/produkte/versicherungen/versicherungsmanager.html> (referer: https://www.norisbank.de)
DEBUG: Saved file nbtest-versicherungen.html

1 个答案:

答案 0 :(得分:1)

规则必须是正则表达式,并且(即使我纠正了您的语法)您也没有正确使用*

r'\*versicher\*'应该是r'.*versicher.*'编辑:看一下草签的文档,看来r'versicher'就足够了。

我不明白您所说的“双重结构”是什么意思,但是您的网址似乎没有它。

我希望r'.*\?\?.*'是您想要的(或r'\?\?'

在正则表达式中

  • .表示任何字符
  • *表示前面的0个或多个(因此.*匹配任何内容)
  • \\是逃脱特殊字符的方式。您不想逃避*,因为您希望它以其特殊的方式起作用。