2013-03-18 60 views
1

如何拒绝Scrapy中使用规则刮取网站的某些部分。Scrapy规则否认

我希望Scrapy抓取链接,以搜索www.example.com/help/nl/ en拒绝与www.example.com/help/en/和www.example.com/website/匹配的所有链接。

我有以下代码:

class MySpider(CrawlSpider): 
    name = 'myspider' 
    allowed_domains = ['example.com', ] 
    start_urls = ['https://www.example.com/help/nl/', ] 
    rules = (
     Rule(SgmlLinkExtractor(allow=(r'/help/nl/',)), callback='parse_response'), 
    ) 

但它爬行的整个网站。

UPDATE

我想Scrapy遵循只包含链接/帮助/ NL/

Rule(SgmlLinkExtractor(allow=(r'/help/nl/',), deny=(other than /help/nl/), callback='parse_response') 
+0

什么网址/网站你在爬行吗? – Talvalin 2013-03-18 15:46:16

+0

https://online.milieubarometer.nl/help/nl/ – nelsonvarela 2013-03-18 15:54:40

+0

运行爬虫程序时它会显示'downloader/response_count'的值(它会显示在日志的末尾),您可以编辑问题显示一些您想要排除的已抓取网页?我只是用你的规则和akhter的规则来运行代码,并且抓取了相同数量的页面,并且都是“./help/nl/”格式。 – Talvalin 2013-03-18 16:50:22

回答

0

试试这个

class MySpider(CrawlSpider): 
    name = 'myspider' 
    allowed_domains = ['example.com', ] 
    start_urls = ['https://www.example.com/help/nl/', ] 
    rules = (
     Rule(SgmlLinkExtractor(allow=(r'/help/nl/',),deny=(r'/en/$',r'/website/$',)), callback='parse_response'), 
    ) 
+0

我尝试过,但scrapy仍然爬行enitre网站。 – nelsonvarela 2013-03-18 14:57:53

0

我的决心是非常相似@akhter答案。但我没有使用正则表达式。

我用:

deny=('/help', '/website') 

应该让这个它会阻止任何以在url(/ help或/网站)

希望它可以帮助