一.,我们理一下使用GitHubActions详解发布爬虫需要哪几个步骤
- 上传爬虫代码到 GitHub 仓库
- 创建 GitHub Actions 工作流,并提交
- 触发 GitHub Actions 工作流运行爬虫
- 查看爬虫运行状态
1.提交代码到仓库
如图提交了代码,代码结构如上图
2. GitHub 仓库主页中找到 「Actions」 标签,再点击它。,搜索python相关的,如Python application就够用了
搜索 Python
,可以找到一个运行 Python 程序的工作流。就它了。
点击 Configure
按钮之后,你会进入如下编辑页面。
所谓 GitHub 工作流,其实是一个 「YAML
配置文件」,类似于现在很流行的 PaaS、IaaS、云原生应用之类的,都用代码来自动化配置。
可以看到其中已经有一些默认工作流代码,我们这里只需要稍微改动一下
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
name: Python application
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test with pytest
run: |
pytest
在界面上点击提交(Commit),你应该就会看到在 .github/workflows
目录下生成了 github-trending-crawler.yml
这个工作流配置文件。
简单来说,上面的工作流做了几件事情:
- 检出(Checkout)该仓库的代码
- 设置 Python 运行环境
- 安装依赖
- 运行程序
查看运行情况
我们提交了这个工作流,它应该会「自动运行」,因为工作流中默认设置触发条件。
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
示每当我们推送提交(Push Commits)或合并请求(Pull Request)时,该工作流会自动触发执行。
现在我们看看运行情况,如果你同样来到 Actions
页面,你会看到出现了工作流的执行列表。
点进最新的那个,再点击 build
,你会看到相关日志,然后我们展开 Test这个步骤的日志。
定时任务
运行爬虫怎么能没有「定时任务」呢?而 GitHub Actions 恰巧支持!那么我们就欣然加上吧。
打开之前创建的工作流编辑页面,将在触发条件代码区域中,加上一段代码,编辑后内容如下。
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '0 * * * *'
其中,Cron 表达式 0 * * * *
表示每小时 0 分触发一次。对 Cron 表达式不熟悉的读者,可以参考 Cron Guru[9]。
编辑好提交之后,我们应该能看到这个每小时执行的定时爬虫任务。
需要详细了解 GitHub Actions 的触发条件,请参考相关官方文档[10]。
总结
本篇文章介绍了如何利用 GitHub Actions 工作流,来部署一个简单的「爬虫定时任务」。用到了技术如下:
- GitHub 代码仓库
- GitHub Actions 工作流,包括定时任务触发
- Python 爬虫开发,包括依赖库 requests[11]、bs4[12]