在 Scrapy 中在一个蜘蛛中有多个解析方法是不是正确?

Posted

技术标签:

【中文标题】在 Scrapy 中在一个蜘蛛中有多个解析方法是不是正确?【英文标题】:Is it correct in Scrapy to have multiple parse methods in one spider?在 Scrapy 中在一个蜘蛛中有多个解析方法是否正确? 【发布时间】:2022-01-23 01:59:20 【问题描述】:

在 Scrapy 中在一个蜘蛛中有多个解析方法是否正确?

看起来像:

import scrapy


class FooSpider(scrapy.Spider):
    name = 'foo'
    start_urls = ['https://example.com']

    def parse(self, response):
        ...
        yield 'foo': foo

    def parse(self, response):
        ...
        yield 'bar': bar

【问题讨论】:

【参考方案1】:

不,但您可以创建不同的方法并从start_requests 调用它们。

import scrapy


class FooSpider(scrapy.Spider):
    name = 'POC'
    start_urls = ['https://scrapingclub.com/exercise/detail_basic/']

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url=url, callback=self.get_title, dont_filter=True)
            yield scrapy.Request(url=url, callback=self.get_price, dont_filter=True)

    def get_title(self, response):
        yield 'title': response.xpath('//h3/text()').get()

    def get_price(self, response):
        yield 'price': response.xpath('//div[@class="card-body"]/h4/text()').get()

【讨论】:

好像只运行第一种方法,没有运行第二种方法。 @Elias 我忘了添加dont_filter=True,查看编辑。 干得好!谢谢。

以上是关于在 Scrapy 中在一个蜘蛛中有多个解析方法是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

如何在scrapy蜘蛛中使用url的站点地图?

强制关闭scrapy蜘蛛

如何在单个 Scrapy 项目中为不同的蜘蛛使用不同的管道

单个 Scrapy 项目与多个项目

如何在我的 Scrapy 蜘蛛代码中使用项目加载器?

如何在scrapy解析中传递元信息?