我正在尝试实现与 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 页扩展到整个网站,可以看出两种方法之间存在巨大差异。
我想知道是否有人可以指出我正在做的错误,或者帮助我提供有关如何存储爬虫通过的所有页面以到达当前页面的建议。可视化看起来像这样:
原来问题出在scrapy的默认抓取顺序中。通过将它从 DFO 更改为 BFO,我得到了预期的统计数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句