warwaruk是正確的,DEPTH_LIMIT設置的默認值是0 - 即「不受限制」。
所以讓我們刮miniova,看看會發生什麼。在today
頁面,我們看到開始有兩個TOR鏈接:
[email protected]:~$ scrapy shell http://www.mininova.org/today
2012-08-15 12:27:57-0500 [scrapy] INFO: Scrapy 0.15.1 started (bot: scrapybot)
>>> from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
>>> SgmlLinkExtractor(allow=['/tor/\d+']).extract_links(response)
[Link(url='http://www.mininova.org/tor/13204738', text=u'[APSKAFT-018] Apskaft presents: Musique Concrte', fragment='', nofollow=False), Link(url='http://www.mininova.org/tor/13204737', text=u'e4g020-graphite412', fragment='', nofollow=False)]
讓我們湊第一環節,我們看到有一些頁面上沒有新的TOR鏈接,只是鏈接iteself,這並沒有得到默認情況下,重新抓取(scrapy.http.Request(網址[,... dont_filter =假,...])):
>>> fetch('http://www.mininova.org/tor/13204738')
2012-08-15 12:30:11-0500 [default] DEBUG: Crawled (200) <GET http://www.mininova.org/tor/13204738> (referer: None)
>>> SgmlLinkExtractor(allow=['/tor/\d+']).extract_links(response)
[Link(url='http://www.mininova.org/tor/13204738', text=u'General information', fragment='', nofollow=False)]
沒有運氣,我們仍處在深度1。讓我們來嘗試其他鏈接:
>>> fetch('http://www.mininova.org/tor/13204737')
2012-08-15 12:31:20-0500 [default] DEBUG: Crawled (200) <GET http://www.mininova.org/tor/13204737> (referer: None)
[Link(url='http://www.mininova.org/tor/13204737', text=u'General information', fragment='', nofollow=False)]
不,這個頁面只包含一個鏈接,以及,鏈接到自己,這也被過濾。所以實際上沒有鏈接,所以Scrapy關閉了蜘蛛(在深度== 1)。
@ warwaruk:「蜘蛛從來沒有發出其他頁面的任何請求」,但MininovaSpider擴展CrawlSpider是用'rules'每一頁上遞歸湊更多的頁面,所以往往沒有必要手動發出請求。 – 2012-08-15 17:46:55
我沒有使用'CrawlSpider',我不知道它是否遞歸。但在我引用的具體例子中,蜘蛛並沒有深入請求。 – warvariuc 2012-08-15 17:51:32
默認情況下,它會盡可能深入地進入每個頁面,並用'rules'來挖掘它找到的所有鏈接。它在深度1處停止的原因是,實際上沒有鏈接可以從'today'頁面中刪除(除了鏈接到它本身,它不會被默認行爲重新請求)。 – 2012-08-15 17:59:49