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

Scrapy XPath无法输出数据求助:提取表格内容无结果

解决Scrapy爬虫导出空白JSON/CSV的问题

针对你遇到的Shell能取到数据但导出空白的情况,按以下步骤排查:

  • 检查parse方法是否返回数据
    新手最容易犯的错误:在Shell里能提取到数据,但爬虫代码里只做了打印,没有yield数据。必须通过yield返回字典或Item对象,Scrapy才会收集数据并导出。
    错误示例:

    def parse(self, response):
        total_data = response.xpath('//span[@class="summary-num"]/text()').get()
        print(total_data)  # 只打印不返回,导出文件必然空白
    

    正确示例:

    def parse(self, response):
        total_data = response.xpath('//span[@class="summary-num"]/text()').get()
        # 返回字典,或者实例化Item后yield
        yield {
            'total_cases': total_data.strip() if total_data else None
        }
    
  • 核对选择器是否完全一致
    确保爬虫代码里的XPath/CSS选择器和你在Scrapy Shell中使用的完全相同,比如别把@id写成@class,或者路径少了层级。直接复制Shell里验证过的选择器到代码里,避免拼写错误。

  • 确认爬虫运行命令正确
    导出文件必须在命令中指定-o参数,比如:

    scrapy crawl 你的爬虫名称 -o ./covid_data.json
    

    注意:如果输出路径是系统目录(如/root/)可能会有权限问题,建议导出到当前用户有权限的本地文件夹,比如上述的当前目录。

  • 检查页面是否被重定向
    在parse方法开头添加打印当前URL的代码,确认爬虫访问的是你预期的页面:

    def parse(self, response):
        print("当前访问URL:", response.url)
        # 后续提取逻辑...
    

    如果URL和start_urls里的不一致,说明页面发生了重定向,需要调整start_urls为最终跳转后的地址。

  • Item类使用是否正确(如果定义了Item)
    如果你定义了Item类,要确保正确实例化并赋值后再yield:

    import scrapy
    
    class CovidItem(scrapy.Item):
        total_cases = scrapy.Field()
        total_deaths = scrapy.Field()
    
    def parse(self, response):
        item = CovidItem()
        item['total_cases'] = response.xpath('//span[@id="total-cases"]/text()').get()
        item['total_deaths'] = response.xpath('//span[@id="total-deaths"]/text()').get()
        yield item  # 必须yield实例化后的Item对象
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:30:56