#python #docker #scrapy #dockerfile
#python #docker #scrapy #dockerfile
Вопрос:
У меня проблема с Scrapy внутри Docker. В docker мой spider не сохраняет выходной файл с результатами.
Это скрипт, который я запускаю для запуска spider:
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from CARS_PL_source_1 import CARSPLsource1Spider
if __name__ == "__main__":
process = CrawlerProcess(get_project_settings())
process.crawl(CARSPLsource1Spider)
process.start()
Внутри моего конвейера у меня есть этот код для сохранения выходных данных:
from scrapy.exporters import JsonItemExporter
class JsonPipeline(object):
def __init__(self):
self.file = open("file.json", 'wb', buffering=0)
self.exporter = JsonItemExporter(self.file, encoding='utf-8', ensure_ascii=False)
self.exporter.start_exporting()
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
def close_spider(self, spider):
self.exporter.finish_exporting()
self.file.close()
И мой файл docker выглядит следующим образом:
FROM python:3
WORKDIR /usr/src/app
COPY car_prices_tool_scrapy/requirements.txt ./
RUN pip3 install --no-cache-dir -r requirements.txt
COPY car_prices_tool_scrapy .
CMD [ "python", "spiders/run_CARS_PL_source_1.py" ]
Без docker spider сохраняет этот файл.json. И во время работы в docker я вижу, что spider работает и получает результаты в журналах, но я нигде не получаю свой файл.
Когда я это делаю docker diff
, я получаю много временных файлов, файлов pycache и т. Д., Но Этот файл.json нигде не видно.
Что я делаю не так?
Комментарии:
1. Как вы запускаете свой контейнер? Точная
docker run ...
команда. Если вы не подключаете локальный том к контейнеру,file.json
он теряется после выхода из контейнера.2. На этот раз я запустил его с помощью этой команды:
docker run -d --name devtest -v myvol2:/app source_1
но после того, как я это сделалdocker diff
, все еще перечислены только те pycache и другие временные файлы без json.3. Ваш выходной json, вероятно, записан внутри контейнера docker. Из dockerfile рабочий каталог /usr/src/app, который не смонтирован в вашей команде запуска docker.
4. Извините, я бы сказал, я изучаю docker «на лету». Прямо сейчас я запустил свой скрипт совершенно по-другому. Я ввел
docker start devtest
тогдаdocker exec -it devtest bash
и тогдаpython run_CARS_PL_source_1.py
. Я смог просмотреть все мои файлы из scrapy, мой requirements.txt файл и т.д. Но все же после запуска скрипта я все еще не могу найти json. Должно быть, я допустил какую-то ошибку?