我想使用Scrapy(了解cb_kwargs)按项目汇总多个页面的信息

zc0qhyus  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(150)

目标:我希望检索在特定电子商务站点上发布的订单绩效数据。由于这些数据分布在每个订单绩效的多个页面上,因此我们希望提取每个页面的信息,并最终将其汇总为单个项目或记录。

我看过官方文档和其他类似的问题解答,找到了一些。从这些信息中,我能够得到一个想法,那就是使用cb_kwargs可能实现这一点。但是,我不明白下面的代码有什么问题。

程序运行,但csv不输出任何内容,如下图所示。enter image description here
订单结果页包含每页30个项目的信息。我想首先检索每个项目的所有注册日期,这些日期只列在第一页上,然后从那里移动到每个产品页以检索详细信息,然后一次存储一个项目的信息。
我是一个初学者,3个月前开始用Python写代码。所以我可能在基本理解类等方面有一些问题。如果你能在我们讨论的时候指出这一点,我会很感激。Scrapy的官方文档对初学者来说太不友好了,我很难理解它。
第一个

bjg7j2ky

bjg7j2ky1#

您需要调用每个页面并将当前项传递给callback:

def parse_first_page(self, response): 
    loader = ItemLoader(item = BuymaResearchtoolItem(), response = response)
    loader.add_xpath("brand_name", 'normalize-space(//*[@id="s_brand"]/dd/a/text())')
    loader.add_value("page_URL" , response.url) 
    loader.add_xpath("inquire" , '//*[@id="tabmenu_inqcnt"]/text()')
    item = loader.load_item()

    yield scrapy. Request(
        url=second_page_url,
        callback=self.parse_second_page,
        cb_kwargs={'item': item},
    )

def parse_second_page(self, response, item): 
    loader = ItemLoader(item=item, response=response)
    loader.add_xpath("Conversion_date", '//*[@id="buyeritemtable"]/div/ul/li[2]/p[3]/text()')
    item = loader.load_item()

    yield scrapy. Request(
        url=third_page_url,
        callback=self.parse_third_page,
        cb_kwargs={'item': item},
    )

def parse_third_page(self, response, item): 
    loader = ItemLoader(item=item, response=response)
    loader.add_value('ThirdUrl', response.url)
    yield loader.load_item()

相关问题