response.url 如何知道我们请求的是哪个 url?(Scrapy)

How does the response.url know which url we're requesting?(Scrapy)

class PostsSpider(scrapy.Spider):
    name = "posts"

    start_urls = ["https://blog.scrapinghub.com/pages/1/",
                  "https://blog.scrapinghub.com/pages/2/"]

    def parse(self, response):
        page=response.url.split('/')[-1]

我刚开始使用 Scrapy,我对最后一行 respons.url.split 感到很困惑。我知道它告诉 url 从后面拆分 1 个位置,但我似乎无法理解 response.url 如何知道我们请求的 url 因为我们的 url 在下面变量 'start_urls' 但我们没有引用 'start_urls'.

请注意,当您定义 class 时,您正在创建 scrapy.Spider 的子 class,因此继承父 class 的方法和属性。

class PostsSpider(scrapy.Spider):

这个父 class 有一个名为 start_requests (source code) 的方法,它将使用 class 变量 [=13] 中定义的 URL =] 创建请求。当创建一个 Request 对象时,它带有一个回调函数。这是当 Scrapy Engine 收到请求响应时将调用的函数。

默认回调函数称为 parse,这就是为什么您需要实现一个名为 parse 的函数来解析您的蜘蛛中的响应。

调用时,此回调函数接收名为 response 的参数。这只不过是一个包含有关请求响应的所有信息的对象,包括您发出请求的 URL 是什么。 (response.url 属性)