【问题标题】:Save scraped data csv file from inside docker container to local host将抓取的数据 csv 文件从 docker 容器内保存到本地主机
【发布时间】:2017-12-06 17:17:16
【问题描述】:

我运行一个 python webscraper 从各种网站收集文章,然后将其保存为 csv 文件。我一直在手动运行这些,但最近一直在尝试在 google cloud shell 中运行它们。我在依赖关系方面遇到了一些问题,所以我决定构建一个 docker 映像来运行我的 python 刮板

到目前为止,我已经成功创建了一个 Dockerfile,用于构建具有所有必要依赖项的容器。

FROM python:3
# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
RUN pip install lxml
COPY Fin24 ./Fin24
COPY scraped_list.csv ./scraped_list.csv

# Run fin24.py when the container launches
CMD ["python3", "fin24.py"]

fin24.py 包含我的刮板。 Fin24 是一个 txt 文件,其中包含我的爬虫在进入每篇文章并提取内容之前为文章链接爬取的所有基本 URL。 scraped_list.csv 包含我之前抓取的所有网站,我的 python 脚本会检查这些网站以确保我不会再次抓取同一篇文章。

运行上述后,我可以看到它有效。 python 脚本在它找到的所有网站都被抓取后停止。但是,我猜它正在将 csv 文件(输出)保存在 docker 容器中。我怎样才能把它保存到我正在运行 docker 的目录中?

最终我想简单地将 Dockerfile 上传到我的 Google 云 shell,并将其作为 cronjob 运行,并将所有输出保存在 shell 中。任何帮助将不胜感激

【问题讨论】:

标签: python docker web-scraping google-cloud-shell


【解决方案1】:

您需要在 docker 部署中挂载该路径。为此,您需要做两件事: 1. 在你的 Dockerfile 中添加一个卷

WORKDIR /path/in/container
VOLUME ["/path/in/container"]

2。使用 -v 选项运行容器

docker run -i -t -v /path/on/host:/path/in/container:rw "container name"

【讨论】:

  • 不错不错。那么这究竟是如何工作的呢?我会将它添加到上面粘贴的 Dockerfile 脚本中吗?当我运行我的 docker 容器时,CMD 函数是否不执行我的 python 脚本,一旦我的刮板完成,它就会终止。这些卷是否会保留我的爬虫的输出,然后将其复制回我的主机路径?即在/path/on/host
  • 嗨,很抱歉我分享了错误的答案。当我们使用 kubernetes 管理 docker 时,此配置有效。如果你直接使用 docker 容器,你需要做一些其他的事情。我正在为此编辑答案。
  • 此外,如果您在 CMD 命令之前使用 VOLUME 命令,则输出将写入您的工作目录并永久保存在主机路径中。
猜你喜欢
  • 2021-04-04
  • 2017-05-01
  • 2014-03-29
  • 2014-08-10
相关资源
最近更新 更多