首页 > 其他分享 >零成本 API 服务搭建,用 GitHub Actions 自动爬取文章?

零成本 API 服务搭建,用 GitHub Actions 自动爬取文章?

时间:2024-08-17 10:48:53浏览次数:8  
标签:API git name 仓库 Actions 爬取 TOKEN GitHub

前言

本着将成本降到最低,我目前做的应用或小程序都是单机的,也就是不用请求接口,只要一上架就没有任何支出。但是写死的数据毕竟有限,应用的内容单一无法紧跟时事热点,每次打开一个样,自然就没有留存。遇到有错字啥还要更新版本,那有没有方法既能丰富应用内容,又不用增加成本呢?

既要又要,当然也有,找网上提供的免费 API 接上去。但是这种有请求数限制,而且还和自己应用的业务不相关,那就只能自己弄接口了。

既然可以在 GitHub 上搭静态博客,那整一个静态 API (json 文件),时不时地更新或提交新的 json 文件上去,在 C 端应用上不也看起来像是动态的了。所以下面就实践一下如何在 GitHub 上搭建 API 服务,以及如何自动化更新数据(部署爬虫)?

 

API 服务搭建

方法和之前在 GitHub 上搭建 Hexo 类似,就是给仓库开启 GitHub Pages,可以自行绑定域名,也可以用之前主仓设置的域名后面带当前仓库名访问。当前域名要备案过了,然后用访问资源的方式能访问到 json 文件 (xml、csv 等) 就可以了。

 

定时爬虫部署

要实现自动化更新数据,那就要定时手动上传和直接爬虫爬取,可以通过 GitHub Actions 工作流的方式实现,下面第一次使用的方式演示如何创建并运行 workflow。

创建推送 TOKEN

因为生成了 json 文件需要自动推送到仓库,为了不用输入账号密码并使用 PAT,这个和之前 Hexo 搭建时获取的一样。settings->developer settings->github apps->personal access tokens->tokens (classic),然后选择 “Generate new token (classic)”。

TOKEN 权限设置

设置名称,有效时间,勾选权限,主要的把 repo、workflow、user、write:discussion 以及 admin 开头的全勾上,如果不想选都选上也可以。最后创建后就会显示 token 值,记得把那个 ghp 开头的字符串复制下来,不然后面就看不到了。这里再说一下 PAT 下的 Fine-grained tokens 和 Tokens (classic) 的区别,上面比 Tokens (classic) 权限控制更精细,安全性更高,而且无法设置不能失效的 Token。

 

测试 TOKEN 是否可用

用 git 命令运行,换成自己的 token 和仓库报错了则说明该 TOKEN 无效

git push https://x-access-token:换成你的[email protected]/z11r00/你的仓库.git HEAD

创建工作流

打开仓库后,点击 Actions,然后点击 New workflow,set up a workflow yourself 后提交。git 拉取后会在项目中生成一个.github 文件夹,依次点进去是刚才创建的工作流 yml 文件。

 

Yml 配置说明

name:工作流名称,展示在用于表示工作流。

on:触发事件,schedule 定时 | push 推送 | pull_request pr 请求,定时任务下有一个 cron 的五个 * 分别是分 时 日 月 星期(, 分割字段多值 - 定义范围 / 指定间隔频率)。

workflow_dispatch: 是否允许在 github actions 操作选项卡中手动操作,默认是可以。

jobs:任务执行的定义。

runs-on: 用于任务执行的运行器,可以说是操作系统,其他的还有 windows 等,具体参考文档,下面会贴出。

steps: 步骤,工作流依次执行的步骤,每个都有一个名字和具体的运行指令,可以使用 actions 包 (github 提供的集成程序,比如用于检出仓库代码的,python 环境的等等)。

 

爬虫工作流

以下定义一个每天八点十分(不一定准时),先是用 TOKEN 检出仓库中的所有代码,然后设置 python 环境后安装指定依赖,运行 script 目录下的 ArticleSpider.py 脚本,最后将脚本里生成的 json 文件提交并推送到仓库。

# 工作流名称
name: article_spider
# 事件:schedule 定时 | push 推送 | pull_request pr请求
on:
  schedule:
    # 分 时 日 月 星期 (*每次都 ,分割字段多值 -定义范围 /指定间隔频率)
    - cron: '10 0 * * *' # 每日8:10,时间点执行任务,注意时区(UTC, 0+8)

  # 是否可在github操作选项卡手动运行
  workflow_dispatch:

# 定义任务
jobs:
  build:
    # 任务运行器(切换可参考文档)
    runs-on: ubuntu-latest

    # 步骤
    steps:
      # 使用到的actions包(用于克隆当前仓库的所有代码)
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          ref: main
          token: ${{ secrets.PUSH_TOKEN }}  # 自定义的个人推送TOKEN
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install requests
          pip install lxml
      - name: execute py script
        env:
          FM_USERNAME: ${{ secrets.USERNAME }}
        run: |
          python script/ArticleSpider.py
      - name: 列出所有文件
        run: |
          ls -l
      - name: Commit changes
        run: |
          git config --local user.email "[email protected]"
          git config --local user.name "bqs"
          git add .
          git commit -m "Add changes" || echo "No changes to commit"
          git push origin main

ArticleSpider.py 脚本

因为对方站点是一个前后端分离的项目,页面的列表和详情都是用异步请求的方式。所以这种抓取就比较好办,写一个 while 循环,页码不断累加的请求接口,判断有超过某时间点的文章则跳出循环。在循环中将数据保存到指定的目录下的 json 文件中,当然也可以自己调整数据,如果要分页就按固定条数分文件。

 

运行效果

虽然是定时的,但也可以去 GitHub 控制台手动运行。打开 Actions,选择工作流名字进去,最后 Run workflow 就等待执行了。详细也可以看到脚本里打印出的日志,执行完毕再回到仓库查看是否有 json 文件生成。

 

 

写在后面

以上只是演示,如果真要弄自己的 API 还是得对爬取的数据做一下处理,拓展一下是不是还可以用这种方式,实现一个带后台管理的资源 “动态网站”。但是应用也不光只有展示,还有提交部分,所以要想零成本实现将用户数据存储下来就要用到另一些方法了,最后 GitHub Actions 用法也远不止于此……

 

标签:API,git,name,仓库,Actions,爬取,TOKEN,GitHub
From: https://www.cnblogs.com/zerofc/p/18364126

相关文章

  • linux创建github仓库并用git上传本地仓库到github仓库
    1.创建github仓库(1)点击右上角的头像(2)点击Yourrepositories(3)点击New(4)填写好Owner和Repositoryname点击AddaREADMEfile选择license,再点击Createrepository2.用git上传本地仓库到github仓库git工作流:(1)点击Code再点击Local查看github仓库地址(2)将git......
  • 利用 Cloudflare workers 反代 github
    反代Github似乎会被认定为欺诈,严重的会封禁域名,不建议尝试首先绑定你的域名到cloudflare,然后创建一个Worker后写入以下代码并添加自定义域名//反代目标网站.constupstream='github.com';//反代目标网站的移动版.constupstream_mobile='github.com';//访问......
  • github 博客
    https://chirpy.cotes.page/posts/getting-started/#option-2-github-forksudoapt-getinstallruby-fullbuild-essentialzlib1g-devecho'#InstallRubyGemsto~/gems'>>~/.zshrcecho'exportGEM_HOME="\(HOME/gems"'>......
  • Ubuntu中编译使用ANTs(医学图像配准)含github无法访问问题解决
    目录第一步、修改hosts文件1.打开https://github.com.ipaddress.com/ 2.打开https://fastly.net.ipaddress.com/github.global.ssl.fastly.net#ipinfo3.打开hosts文件,并在文件末尾添加如下内容 第二步、编译ANTs1)首先安装git、cmake以及c++编译器2)编译3)配置bin目录,......
  • c# net爬取百度热搜
    varurl="https://top.baidu.com/board?tab=realtime";//百度using(varhttpClient=newHttpClient()){varresponse=awaithttpClient.GetStringAsync(url);varhtmlDocument=newHtmlDocument();htmlDocument.LoadHtml(response);varcategoryWrapN......
  • python爬虫爬取某图书网页实例
    文章目录导入相应的库正确地设置代码的基础部分设置循环遍历遍历URL保存图片和文档全部代码即详细注释下面是通过requests库来对ajax页面进行爬取的案例,与正常页面不同,这里我们获取url的方式也会不同,这里我们通过爬取一个简单的ajax小说页面来为大家讲解。(注:结尾附......
  • 【项目实战】基于Python的网络小说榜单信息爬取与数据可视化系统
    注意:该项目只展示部分功能,如需了解,文末咨询即可。本文目录1.开发环境2系统设计2.1设计背景2.2设计内容3系统页面展示3.1用户页面3.2管理员页面3.3功能展示视频4更多推荐5部分功能代码5.1爬虫代码5.2小说代码1.开发环境开发语言:Python技术框架:Fla......
  • 使用Github Action来拉取docker镜像
    前提只需一个github账号即可注意:免费版Action每天能使用1小时,每个月33小时(基本上够用)国内网络访问github网速并不稳定,但是用来应急还是可以的拉取逻辑GitHubAction来拉取和打包镜像从github上下载压缩包上传到自己的服务器上解压加载镜像到自己的服务器上这种......
  • github.com/go-delve/delve
     对于delve在官方网站上有比较详细的说明,而且安装情况也是非常简单。我们只需要点击installation中的windows。注意:如果在模块模式下使用Go,则必须在模块目录之外执行此命令,否则Delve将作为依赖项添加到项目中。  然后我们只需要在goland中进行配置一下即可。然后添加相......
  • 发现敏感文件信息(web+google+github):网络安全案例研究
    第一部分:互联网第二部分:GitHub第三部分:GoogleDork结论作为一名安全研究人员,工作中最有意义的方面之一是发现和报告可能危及敏感信息的漏洞。在这篇博文中,将带大家了解最近在Web应用程序上发现的敏感文件信息、所使用的工具和技术以及保护敏感文件的重要性。免责声明:本博......