首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ItemLoader不会将加载器上下文传递给输入处理器

ItemLoader不会将加载器上下文传递给输入处理器
EN

Stack Overflow用户
提问于 2019-06-19 07:00:45
回答 1查看 149关注 0票数 0

我的蜘蛛: autospd.py

代码语言:javascript
复制
class AutospdSpider(scrapy.Spider):
    name = 'autospd'
    start_urls = ['http://news.dayoo.com/guangzhou/150960_2.shtml']
    dt_ft = "%Y-%m-%d %H:%M"

    def parse(self, response):
        list_objs = response.css("div.dy-list>div")

        for li in list_objs:
            loader = AutopjtItemLoader(item=AutopjtItem(), selector=li, context=self.dt_ft)

            print(loader.context.items())  #please see print-1

            loader.nested_css("h2>a").add_css("title", "::text")
            loader.nested_css("h2>a").add_css("url", "::attr(href)")
            loader.nested_css("div.txt-area>div.news-time").add_xpath("pub_time", "string()")

            yield loader.load_item()

打印-1:dict_items(‘context’,‘%Y-%m- %H:%M'),(’选择器‘,\r\n '>),(’响应‘,无),('item',{})

items.py

代码语言:javascript
复制
def func(value, loader_context):
    print(loader_context.items())  # please see print-2
    # ft = loader_context.get("context")
    # time_dt = datetime.strptime(value, ft)
    return value


class AutopjtItemLoader(ItemLoader):
    default_output_processor = TakeFirst()

    pub_time_in = MapCompose(func)


class AutopjtItem(scrapy.Item):
    title = scrapy.Field()
    url = scrapy.Field()
    pub_time = scrapy.Field()

打印-2:[(“选择器”,2019-06-12 08:59< '>),(“响应”,无),(“项目”,{})]

为什么在loader_context中没有“上下文”?

EN

回答 1

Stack Overflow用户

发布于 2019-06-20 01:24:10

代码语言:javascript
复制
def nested_xpath(self, xpath, **context):
    selector = self.selector.xpath(xpath)
    context.update(selector=selector)
    subloader = self.__class__(
        item=self.item, parent=self, **context
    )
    return subloader

def nested_css(self, css, **context):
    selector = self.selector.css(css)
    context.update(selector=selector)
    subloader = self.__class__(
        item=self.item, parent=self, **context
    )
    return subloader

从scrapy的源代码中,如果使用nested_css或nested_xpath,则必须添加上下文。例:

代码语言:javascript
复制
loader.nested_css("div.txt-area>div.news-time", dt_ft=self.dt_ft).add_xpath("pub_time", "string()")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56661794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档