[英]Scrapy CrawlSpider: URL depth
我正在嘗試實現與 ScreamingFrog 相同的功能——測量 url 深度。 為此,我正在訪問 response.meta 的深度參數,就像這樣: response.meta.get('depth', 0)
,但我得到的結果與 ScreamingFrog 的結果有很大不同。 因此,我想通過保存CrawlSpider 經歷的所有頁面來調試為什么會發生這種情況,以便到達當前頁面。
這是我目前的蜘蛛的樣子:
class FrSpider(scrapy.spiders.CrawlSpider):
"""Designed to crawl french version of dior.com"""
name = 'Fr'
allowed_domains = [website]
denyList = []
start_urls = ['https://www.%s/' % website]
rules = (Rule(LinkExtractor(deny=denyList), follow=True, callback='processLink'),)
def processLink(self, response):
link = response.url
depth = response.meta.get('depth', 0)
print('%s: depth is %s' % (link, depth))
這里比較了我的爬蟲和尖叫蛙之間的爬行統計數據(同一網站,僅限前 ~500 頁):
Depth(Clicks from Start Url) Number of Urls % of Total
1 62 12.4
2 72 14.4
3 97 19.4
4 49 9.8
5 40 8.0
6 28 5.6
7 46 9.2
8 50 10.0
9 56 11.2
---------------------------- -------------- ----------
對比
正如您所看到的,它有很大不同,通過將抓取從前 500 頁擴展到整個網站,可以看出兩種方法之間存在巨大差異。
我想知道是否有人可以指出我正在做的錯誤,或者幫助我提供有關如何存儲爬蟲通過的所有頁面以到達當前頁面的建議。 可視化看起來像這樣:
您可以嘗試 DEPTH_STATS_VERBOSE(在設置中),然后檢查兩個結果是否相等。
原來問題出在scrapy的默認抓取順序中。 通過將它從 DFO 更改為 BFO,我得到了預期的統計數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.