You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy Item填充问题:如何添加页面title中的日期字段至Item

Scrapy ItemLoader填充全局字段的解决方法

错误原因

你写的l.add_css('date', "response.css('title')")是错误的,add_css的第二个参数需要是CSS选择器字符串(比如'title::text'),而不是调用response.css()后的对象。而且日期是整个页面的全局数据,没必要在循环里重复解析。

最优解决方案(无需新增解析函数)

直接在循环外提前提取日期,再在循环内通过add_value把日期添加到每个Item中:

def parse(self, response):
    # 1. 先提取页面标题中的日期(根据实际格式调整提取逻辑)
    title_text = response.css('title::text').get().strip()
    # 示例:如果标题格式是"2024-05-20 牛奶产品清单",用正则提取日期
    import re
    date_match = re.search(r'\d{4}-\d{2}-\d{2}', title_text)
    product_date = date_match.group() if date_match else None

    # 2. 循环处理每个产品项
    for product in response.xpath('//你的产品列表xpath'):
        l = ItemLoader(item=YourCustomItem(), selector=product)
        l.add_xpath('milk', './相对xpath/to/milk字段')
        l.add_xpath('number', './相对xpath/to/number字段')
        # 直接添加已提取好的全局日期
        l.add_value('date', product_date)
        yield l.load_item()

其他可选写法(不推荐)

如果一定要用add_css,可以在循环内这么写(但会重复解析title,效率低):

l.add_css('date', 'title::text')

之后你需要在Item的date字段的输入处理器里,添加提取日期的逻辑(比如正则过滤),避免把整个title内容存进去。

总结

完全不需要创建新的解析函数,因为日期和产品数据都来自同一个response,直接在当前解析函数里提前提取全局数据,再循环复用即可,这是最简洁高效的方式。

内容的提问来源于stack exchange,提问作者user19783276

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:25:14