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

使用Scrapy与XPath解析数据及Pipeline数据清洗配置问题咨询

问题解答

节点提取问题

你后续更新的提取方案是正确的:原HTML结构中announcement-block__date节点内部包含了子span节点(存放公司名),你需要的日期、城市文本属于span的后续兄弟文本节点,直接取div的text()无法拿到跨标签的文本内容,使用following-sibling::text()结合normalize-space处理后再按逗号拆分,就可以正确获取到对应字段。

额外问题:items.py 与 pipeline 用法说明

两者不是二选一的关系,功能定位不同,需要配合使用:

  1. items.py 的作用:定义结构化的字段规范,避免爬虫开发中字段名拼写错误,统一各爬虫的输出数据结构,不同爬虫可以定义不同的Item类。
  2. pipelines.py 的作用:全局统一处理所有爬虫提交的Item,包括数据清洗、格式转换、校验、存储等逻辑,你需要的字段转换规则都可以放在这里实现。

具体实现步骤

1. 配置 items.py

先定义你需要的字段,这里示例给jobs爬虫单独定义Item,其他爬虫可以同理新增对应Item类:

import scrapy

class JobItem(scrapy.Item):
    date = scrapy.Field()
    city = scrapy.Field()
    company = scrapy.Field()
    salary = scrapy.Field()
    employer = scrapy.Field()

# 其他爬虫的Item可以继续在这里定义
class ApartmentItem(scrapy.Item):
    # 对应公寓爬虫的字段
    pass

class CarItem(scrapy.Item):
    # 对应车辆爬虫的字段
    pass

2. 配置 pipelines.py

通过spider.name区分不同爬虫,只对jobs爬虫执行你需要的清洗规则:

from itemadapter import ItemAdapter

class ScrapebooksPipeline:
    def process_item(self, item, spider):
        # 只处理jobs爬虫的Item
        if spider.name == 'jobs':
            adapter = ItemAdapter(item)
            # 规则1:salary小于1000替换为Negotiable
            salary = adapter.get('salary')
            if salary and isinstance(salary, (int, float)) and salary < 1000:
                item['salary'] = 'Negotiable'
            # 规则2:日期包含Өчигдөр则替换为Yesterday,保留时间
            date = adapter.get('date', '').strip()
            if 'Өчигдөр' in date:
                item['date'] = date.replace('Өчигдөр', 'Yesterday')
            # 规则3:employer包含Хувь хүн则修改company字段
            employer = adapter.get('employer', '')
            if 'Хувь хүн' in employer:
                item['company'] = 'Хувь хүн'
        return item

3. 开启pipeline配置

找到项目的settings.py文件,新增/修改以下配置,开启pipeline才会生效:

ITEM_PIPELINES = {
   '你的项目名.pipelines.ScrapebooksPipeline': 300,
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:06:06