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

Scrapy导出CSV数据全在一行?求解决(期望8行4列格式)

Scrapy导出CSV数据全部在一行的问题解决

问题根源

  1. XPath路径错误:循环内部的XPath使用//开头的绝对路径,每次都会从整个HTML文档根节点开始查询,导致每轮循环都获取到页面上所有的帖子、投票数等数据,而非当前遍历的单个帖子节点下的数据。
  2. 数据提取方式不当:extract()方法会返回所有匹配结果的列表,而你需要的是单条数据,应该使用get()(Scrapy 2.0+)或extract_first()来获取单个值。

修正后的代码

import scrapy

class MyredditSpider(scrapy.Spider):
    name = 'myreddit'
    allowed_domains = ['reddit.com']
    start_urls = ['http://www.reddit.com/']
    # custom_settings = {
    #     "FEEDS":{"result.csv":{"format":"csv",}}
    # }

    def parse(self, response):
        all_var = response.xpath("//div[@class='rpBJOHq2PR60pnwJlUyP0']")
        
        for variable in all_var:
            # 使用./开头的相对路径,仅在当前variable节点下查询
            post = variable.xpath("./h3[@class='_eYtD2XCVieq6emjKBH3m']/text()").get()
            vote = variable.xpath("./div[@class='_1rZYMD_4xY3gRcSS3p8ODO _3a2ZHWaih05DgAOtvu6cIo ']/text()").get()
            time = variable.xpath("./span[@class='_2VF2J19pUIMSLJFky-7PEI']/text()").get()
            links = variable.xpath("./a[@data-click-id='body']/@href").get()
        
            yield {"Posts": post, "Votes": vote, "Time": time, "Links": links}

说明

修正后重新执行导出命令:

scrapy crawl myreddit -o items.csv

此时CSV会生成8行4列的格式,每行对应一条帖子数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:30:54