最近有一个定时抓取指定任务的需求需要实现,发现使用GO语言来写,只需要不到30行代码就能满足我的需求。
全部代码如下:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"time"
)
func main() {
pretime := time.Second * 103 //设置执行的时间间隔
timeTickerChan := time.Tick(pretime) // 创建一个计时器
i := 1 //当前执行次数
url := "http://www.55mx.com/" //抓取的URL
for {
fmt.Println(time.Now().Format("2006-01-02 15:04:05"), ":正在执行第", i, "次任务")
res, err := http.Get(url) // 发送网络请求
if err != nil {
fmt.Fprintf(os.Stderr, "发送抓取请求出错了: %vn", err)
}
body, err := ioutil.ReadAll(res.Body) // 读取资源数据
res.Body.Close() // 关闭资源
if err != nil {
fmt.Fprintf(os.Stderr, "抓取出错: %s: %vn", url, err)
}
fmt.Println(string(body), pretime, "后将再次执行~")
i++
<-timeTickerChan
}
}
我在MacOS下写的,使用下面的2种方式分别编译成了Linux与Windows可执行程序。
1、Linux 编译方式:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ./main.go
然后上传到相关目录后,需要设置权限:
chmod 777 ./main
这里的main是默认编译后的名称,你可以手动改名。然后使用下面的代码运行:
./main #直接前台运行
nohup ./main & #在后台运行
如果你的程序在后台运行的情况下,可以使用jobs -l 或者ps -aux | grep "autopost" 查看到后台程序运行情况,要结束使用kill PID即可。
2、Windows 编译方式:
CGO_ENABLED=0 GOOS=windows go build ./main.go
会生成一个main.exe文件,双击即可运行。
如果你需要在Windows下编译成后台运行的方式,请使用下面的编译命令:
go build -ldflags "-H=windowsgui" main.go
除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:https://www.55mx.com/post/190
《30行GO语言代码实现定时抓取指定URL》的网友评论(0)