作为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
答案 0 :(得分:1)
规则必须是正则表达式,并且(即使我纠正了您的语法)您也没有正确使用*
。
r'\*versicher\*'
应该是r'.*versicher.*'
编辑:看一下草签的文档,看来r'versicher'
就足够了。
我不明白您所说的“双重结构”是什么意思,但是您的网址似乎没有它。
我希望r'.*\?\?.*'
是您想要的(或r'\?\?'
)
在正则表达式中
.
表示任何字符*
表示前面的0个或多个(因此.*
匹配任何内容)\\
是逃脱特殊字符的方式。您不想逃避*
,因为您希望它以其特殊的方式起作用。