Scrapy中如何实现的记录爬虫的深度?
参考答案:
在Scrapy中,你可以使用Request
对象的meta
字典来记录爬虫的深度。meta
字典可以用来传递一些额外的信息,这些信息将在请求的生命周期中保持不变。你可以利用这个特性来传递和更新爬虫的深度。
以下是一个基本的示例,演示了如何在Scrapy中使用meta
字典来记录爬虫的深度:
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://example.com']
def parse(self, response):
# 获取当前请求的URL和深度
url = response.url
depth = response.meta.get('depth', 0)
# 打印当前请求的URL和深度
print(f"Visited: {url} (depth: {depth})")
# 提取链接并生成新的请求
for href in response.css('a::attr(href)').getall():
# 构造完整的URL
full_url = response.urljoin(href)
# 创建一个新的请求,并将深度+1
yield scrapy.Request(full_url, self.parse, meta={'depth': depth + 1})
在这个示例中,parse
方法首先获取当前请求的URL和深度(从meta
字典中)。然后,它打印出这些信息。接下来,它提取页面上的链接,并为每个链接创建一个新的请求。在创建新请求时,它通过meta
字典将深度加1,并将新的请求传递给parse
方法。这样,每次请求都会更新其深度,并在控制台上打印出来。