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

如何修改Scrapy中.getall()方法的分隔符?

解决方案

Scrapy的.getall()方法本身仅负责返回匹配到的文本列表,没有参数可以直接修改其分隔符——因为它的设计目标就是获取原始的文本集合,而非格式化输出。要实现你要的效果,最直接高效的方式是在爬取阶段将列表转换为用竖线/分号分隔的字符串,这样导出CSV时该字段会作为单个值存在,不会干扰整体CSV的逗号分隔规则。

修改你的代码如下:

def entry_parse(self, response):
    for entry in response.xpath("//tbody[@class='entry-grid-body infinite']//td[@class]"):
        # 用竖线分隔列表元素,替换成';'即可改用分号
        labels = '|'.join(entry.xpath(".//div[@class='entry-labels']/span/text()").getall())
        yield {'entry_labels': labels}

原理说明

  • Scrapy导出CSV时,若字段值是列表类型,会默认用逗号将列表元素拆分,这会破坏CSV的列结构(比如原本一个字段会被拆成多列)。
  • 将列表通过str.join()转换为字符串后,该字段会被CSV识别为单个单元格内容,内部的竖线/分号不会触发CSV的分隔逻辑,完美满足你“整体CSV用逗号分隔,字段内用其他符号分隔”的需求。

如果后续需要调整分隔符,只需修改'|'为你想要的符号即可,无需改动CSV导出的全局配置,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:25:12