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

如何在Zyte Scrapy Cloud的Scrapy爬虫中访问CSV文件?

解决Zyte服务器部署后CSV文件找不到的问题

问题背景

本地环境中可正常读取CSV文件,但将Scrapy项目部署到Zyte服务器后,触发文件未找到错误。相关项目结构、爬虫代码及setup.py如下:

项目结构

account_history/
├── account_history/
│   ├── spiders/
│   ├── __init__.py
│   └── ...
├── data/
│   └── results.csv
├── scrapy.cfg
├── requirements.txt
├── scrapinghub.yml
└── setup.py

爬虫读取文件代码片段

import scrapy
import re
import pandas as pd
from urllib.parse import urljoin
import os
from scrapy_playwright.page import PageMethod

class AddressesSpider(scrapy.Spider):
    name = "addresses"
    allowed_domains = ["www.domain.com"]

    def start_requests(self):
        current_dir = os.path.dirname(os.path.abspath(__file__))
        chunk_size = 1000 
        csv_file = os.path.join(current_dir, '..', '..', 'data', 'results.csv') 

原setup.py代码

# Automatically created by: shub deploy

from setuptools import setup, find_packages

setup(
    name         = 'project',
    version      = '1.0',
    packages     = find_packages(),
    entry_points = {'scrapy': ['settings = account_history.settings']},
)

问题原因

部署到Zyte服务器时,setuptools的find_packages()默认仅打包account_history包内的代码文件,根目录下的data目录未被纳入部署包,导致服务器环境中不存在该文件,进而触发找不到文件的错误。

解决方案

方案1:将data目录移入包内并配置打包规则

  1. 调整项目结构:把data目录移到account_history包内,结构变为:
account_history/
├── account_history/
│   ├── spiders/
│   ├── data/
│   │   └── results.csv
│   ├── __init__.py
│   └── ...
├── scrapy.cfg
├── requirements.txt
├── scrapinghub.yml
└── setup.py
  1. 修改爬虫文件路径:
csv_file = os.path.join(current_dir, '..', 'data', 'results.csv')
  1. 修改setup.py:添加package_data配置确保CSV文件被打包:
from setuptools import setup, find_packages

setup(
    name         = 'project',
    version      = '1.0',
    packages     = find_packages(),
    entry_points = {'scrapy': ['settings = account_history.settings']},
    package_data={
        'account_history': ['data/*.csv']
    }
)

方案2:保留原结构,通过data_files配置打包

若不想移动data目录,可修改setup.py添加data_files参数,将文件打包到服务器指定位置:

from setuptools import setup, find_packages

setup(
    name         = 'project',
    version      = '1.0',
    packages     = find_packages(),
    entry_points = {'scrapy': ['settings = account_history.settings']},
    data_files=[('', ['data/results.csv'])]
)

同时修改爬虫中的文件路径,从项目根目录读取:

# 获取项目根目录
project_root = os.path.dirname(os.path.abspath(os.path.join(__file__, '../../..')))
csv_file = os.path.join(project_root, 'data', 'results.csv')

方案3:使用Zyte文件存储功能

若CSV文件较大或需动态更新,可将文件上传至Zyte Data Storage,在爬虫中通过存储路径直接读取文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:27:44