Python中Scrapy框架如何获取原始的start_url?

Scrapy爬虫时,由于重定向或是其他原因,会导致原始的start_url发生改变,怎样才能得到原始的start_url?

def start_requests(self):
    start_url = 'your_scrapy_start_url'
    yield Request(start_url, self.parse)

def parse(self, response): item = YourItem() item[‘start_url’] = 原始请求的 start_url yield item


Python中Scrapy框架如何获取原始的start_url?

3 回复

在Scrapy里,获取原始的 start_urls 列表其实很简单。你可以在Spider的 __init__ 方法里直接访问 self.start_urls,或者通过 start_requests 方法间接拿到。

最直接的方法就是在你的Spider类里直接引用它。比如:

import scrapy

class MySpider(scrapy.Spider):
    name = 'my_spider'
    start_urls = ['http://example.com/page1', 'http://example.com/page2']

    def parse(self, response):
        # 在这里,self.start_urls 就是原始的列表
        for url in self.start_urls:
            self.logger.info(f'Start URL: {url}')
        # ... 你的解析逻辑

如果你重写了 start_requests 方法,需要自己构造Request,同样可以访问 self.start_urls

import scrapy

class MySpider(scrapy.Srapy.Spider):
    name = 'my_spider'
    start_urls = ['http://example.com/page1', 'http://example.com/page2']

    def start_requests(self):
        # 在重写的方法里,self.start_urls 依然可用
        self.logger.info(f'Starting with URLs: {self.start_urls}')
        for url in self.start_urls:
            yield scrapy.Request(url, callback=self.parse)

    def parse(self, response):
        # 解析逻辑
        pass

关键点就一个:start_urls 是定义在Spider类上的一个属性,在Spider实例的任何方法中,通过 self.start_urls 都能拿到它。

总结:直接在Spider实例方法里用 self.start_urls 访问。


Scrapy 爬虫常见问题总结 : http://www.revotu.com/scrapy-reptile-faq.html

利用 Request 中的 meta 参数传递信息

def start_requests(self):
start_url = ‘your_scrapy_start_url’
yield Request(start_url, self.parse, meta={‘start_url’:start_url})

def parse(self, response):
item = YourItem()
item[‘start_url’] = response.meta[‘start_url’]
yield item

response.request.url

回到顶部