使用 golang 1.16 embed 更改[一個基於 golang 的爬蟲電影站] 專案靜態資原始檔的打包方式

hezhizheng發表於2021-11-01

原文:一個基於 golang 的爬蟲電影站

其實也可以說是因為想給原專案換一個展示模板,就想著利用 embed 的特性順便改寫一下專案原本靜態資原始檔的打包方式。

回顧了之前寫的程式碼,瞭解 embed 、template 的用法。感謝 大佬部落格的文章 (乾貨滿滿)

JMJzmptsjV.png!large

golang + redis 實現的影站(低階爬蟲)。無管理後臺,效果站:film.hzz.cool 支援手機端訪問播放

Github地址

github.com/hezhizheng/go-movies

features

  • 使用 Golang 1.16 embed 內嵌靜態資源(html、js、css等),執行只依賴編譯後可執行的二進位制檔案與redis
  • 支援docker啟動方式
  • 簡單資源分類、搜尋的支援
  • 內建自動爬蟲、自動更新最新資源的定時任務,基本滿足日常看片需求。
  • 釘釘機器人通知

Tip

  • 暫時只維護API請求版本 API介面說明.txt,後續可能追加其他資源支援
  • API版本首次啟動會全量請求並儲存到redis,之後每小時定時爬取最近更新的影視資源

目錄結構

|-- Dockerfile
|-- LICENSE.txt
|-- config
|   |-- app.go
|   `-- app.go.backup                        #程式配置檔案
|-- controller                               #controller層,基本的頁面渲染
|   |-- DebugController.go
|   |-- IndexController.go
|   `-- SpiderController.go
|-- docker-compose.yml
|-- go.mod
|-- go.sum
|-- main.go
|-- models                                   # 定義一些redis查詢的方法
|   |-- Category.go
|   |-- Movies.go
|   `-- readme.md
|-- readme.md
|-- routes
|   `-- route.go
|-- runner.conf                              # fresh 配置檔案
|-- services                                 # 普通業務處理類
|   |-- CategoryService.go
|   |-- MoviesService.go
|   `-- readme.md
|-- static2                                  # js、css、image等靜態資原始檔夾
|-- utils                                    # 一些工具類
|   |-- Cron.go
|   |-- Dingrobot.go
|   |-- Helper.go
|   |-- JsonUtil.go
|   |-- Pagination.go
|   |-- RedisUtil.go
|   |-- Spider.go
|   |-- SpiderTask.go
|   `-- spider                               # 爬蟲api版主要功能程式碼
|       |-- SpiderTaskPolicy.go
|       `-- tian_kong
|           |-- CategoriesStr.go
|           `-- SpiderApi.go
`-- views                                    # html模板目錄
    `-- tmpl
        `-- temp_global_var.go               # 定義 embed 的全域性變數跟一些模板呼叫的函式

首頁效果

JNDCJYD5lp.png!large 5e4G5PyWSe.png!large

使用安裝 (go version >= 1.16)

# 下載
git clone https://github.com/hezhizheng/go-movies

# 進入目錄
cd go-movies

# 配置檔案(預設使用redis db10的庫,可自行修改app.go中的配置)
cp ./config/app.go.backup ./config/app.go

# 配置說明
app.spider_path: 爬蟲路由
app.spider_path_name: 爬蟲路由名稱
app.debug_path: debug的路由
app.debug_path_name: debug的路由名稱
cron.timing_spider: 定時爬蟲的CRON表示式
ding.access_token: 釘釘機器人token
app.spider_mod: 固定引數為 TianKongApi
app.spider_mod: 開發模式建議設定為`true` 避免修改靜態資源需要重啟服務

# 啟動 (首次啟動會自動開啟爬蟲任務)
go run main.go 
or
# 安裝 fresh 工具
fresh

# 如安裝依賴包失敗,請使用代理
export GOPROXY=https://goproxy.io,direct
or
export GOPROXY=https://goproxy.cn,direct

訪問
http://127.0.0.1:8899

開啟爬蟲

  • 已內建定時爬蟲,首次全量請求之後,每小時定時爬取最近更新的影視資源(可自行修改配置檔案cron.timing_spider表示式來控制間隔)
  • 主動執行:直接訪問連結 127.0.0.1:8899/movies-spider
  • 耗時:具體時間受目標網站/介面的響應速度影響

Tools

編譯可執行檔案(跨平臺)

# 用法參考 https://github.com/mitchellh/gox
# 生成檔案可直接執行 
gox -osarch="windows/amd64" -ldflags "-s -w" -gcflags="all=-trimpath=${PWD}" -asmflags="all=-trimpath=${PWD}"
gox -osarch="darwin/amd64" -ldflags "-s -w" -gcflags="all=-trimpath=${PWD}" -asmflags="all=-trimpath=${PWD}"
gox -osarch="linux/amd64" -ldflags "-s -w" -gcflags="all=-trimpath=${PWD}" -asmflags="all=-trimpath=${PWD}"
  • 提供win64的已編譯的檔案下載 release

使用請確保redis為開啟狀態,預設使用 DB10,啟動成功之後會自動執行爬蟲,可自行訪問 http://127.0.0.1:8899/movies-spider 進行爬蟲

img

Docker 部署(使用docker-compose可直接忽略該步驟)

# 安裝 redis 映象(已有可以忽略) 
sudo docker pull redis:latest

# 啟動redis容器
# 根據實際情況分配埠 -p 宿主機埠:容器埠
sudo docker run -itd --name redis-test -p 6379:6379 redis

# 修改 app.go 的redis 連線地址為容器名稱
"addr":"redis-test"

# 編譯go-movies
gox -osarch="linux/amd64" -ldflags "-s -w" -gcflags="all=-trimpath=${PWD}" -asmflags="all=-trimpath=${PWD}"

# 構造映象
sudo docker build -t go-movies-docker-scratch .

# 啟動容器
sudo docker run --link redis-test:redis -p 8899:8899 -d go-movies-docker-scratch

docker-compose 一鍵啟動

# 修改 app.go 的redis 連線地址為容器名稱,這裡需要跟docker-compose.yml中保持一致
"addr":"redis-test"

# 編譯go-movies
gox -osarch="linux/amd64" -ldflags "-s -w"

# 執行
sudo docker-compose up -d

開啟遊覽器訪問 http://127.0.0.1:8899 即可看見網站效果
本作品採用《CC 協議》,轉載必須註明作者和本文連結
hezhizheng

相關文章