跳到主要内容

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方法。这样,每次请求都会更新其深度,并在控制台上打印出来。