gpt4 book ai didi

python - scrapy中在哪里定义项目自定义项目加载器?

转载 作者:行者123 更新时间:2023-11-30 22:16:25 25 4
gpt4 key购买 nike

我开始在 scrapy 中使用项目加载器,基本功能运行良好,如下所示:

l.add_xpath('course_title', '//*[@class="course-header-ng__main-info__name__title"]//text()')

但是如果我想对这个项目应用一个函数,我在哪里定义该函数?

关于this问题有一个例子:

from scrapy.loader.processors import Compose, MapCompose, Join, TakeFirst
clean_text = Compose(MapCompose(lambda v: v.strip()), Join())
to_int = Compose(TakeFirst(), int)

class MyItemLoader(ItemLoader):
default_item_class = MyItem
full_name_out = clean_text
bio_out = clean_text
age_out = to_int
weight_out = to_int
height_out = to_int

这可以代替自定义模板吗?:

import scrapy


class MoocsItem(scrapy.Item):
# define the fields for your item here like:
description = scrapy.Field()
course_title = scrapy.Field()

我可以使用单行函数作为函数吗?

clean_text = Compose(MapCompose(lambda v: v.strip()), Join())

最佳答案

有两种方法可以使用它。

方法 1

您可以更改您的 Item 类,如下所示

class MoocsItem(scrapy.Item):
# define the fields for your item here like:
description = scrapy.Field()
course_title = scrapy.Field(output_processor=clean_text)

然后你将像下面一样使用它

from scrapy.loader import ItemLoader
l = ItemLoader(item=MoocsItem(), response=response)
l.add_xpath('course_title', '//*[@class="course-header-ng__main-info__name__title"]//text()')

item = l.load_item()

这当然是在回调中。

方法2

使用它创建自己的加载程序的另一种方法

class MoocsItemLoader(ItemLoader):
default_item_class = MoocsItem
course_title_name_out = clean_text

然后您需要在回调中使用加载程序,如下所示

from scrapy.loader import ItemLoader
l = MoocsItemLoader(response=response)
l.add_xpath('course_title', '//*[@class="course-header-ng__main-info__name__title"]//text()')

item = l.load_item()

正如您在这种方法中看到的,您不需要向其传递创建的项目

关于python - scrapy中在哪里定义项目自定义项目加载器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49961910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com