欢迎光临
我们一直在努力

go语言学习例子No.6–监控VPS库存简单例子

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"regexp"
	"time"
)

type pachong struct {
	reg  string //保存正则表达式
	url  string //保存网址
	name string //保存监控的产品名称
}

func (p *pachong) getinfo() { //爬虫结构体的getinfo方法
	res, err := http.Get(p.url)
	if err != nil {
		log.Fatal(err)
	}
	result, err := ioutil.ReadAll(res.Body)
	// err = ioutil.WriteFile("abc.txt", result, 0777) //这里可以输出网页源码看看是否获取到正确的源码
	res.Body.Close()
	if err != nil {
		log.Fatal(err)
	}
	rep := regexp.MustCompile(p.reg)                    //匹配正则
	finalslice := rep.FindAllString(string(result), -1) //返回字符串切片,-1表示全部,1表示匹配1个,2就匹配2个
	var finalstring string
	for _, v := range finalslice { //遍历切片
		finalstring = finalstring + v[len(v)-11:len(v)]
	}
	fmt.Println("获取到", len(finalslice), "条信息")
	fmt.Println(p.name, finalstring)

}
func main() {
	pa1 := &pachong{`(?U:id="product1"[\S\s]+0 Available[\S\s]+product2)`, "https://my.frantech.ca/cart.php", "buyvm的LV RYZEN KVM 512MB:"}

	for {
		pa1.getinfo()
		time.Sleep(6e10)
	}

}

正则[\S\s]可以代表任意字符

这里还不够严谨,好像有库存不会显示0 Available

我们加个判断

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"regexp"
	"time"
)

type pachong struct {
	reg  string //保存正则表达式
	url  string //保存网址
	name string //保存监控的产品名称
}

func (p *pachong) getinfo() { //爬虫结构体的getinfo方法
	res, err := http.Get(p.url)
	if err != nil {
		log.Fatal(err)
	}
	result, err := ioutil.ReadAll(res.Body)
	// err = ioutil.WriteFile("abc.txt", result, 0777) //这里可以输出网页源码看看是否获取到正确的源码
	res.Body.Close()
	if err != nil {
		log.Fatal(err)
	}
	rep := regexp.MustCompile(p.reg)                    //匹配正则
	finalslice := rep.FindAllString(string(result), -1) //返回字符串切片,-1表示全部,1表示匹配1个,2就匹配2个
	var finalstring string
	for _, v := range finalslice { //遍历切片
		finalstring = finalstring + v
	}
	fmt.Println("获取到", len(finalslice), "条信息")
	if len(finalslice) > 0 {
		fmt.Println(p.name, "0 available")
	} else {
		fmt.Println(p.name, "好像有库存啦!")
	}
}

func main() {
	pa1 := &pachong{`(?U:id="product1"[\S\s]+0 Available[\S\s]+product2)`, "https://my.frantech.ca/cart.php", "buyvm的LV RYZEN KVM 512MB:"}
        pa2 := &pachong{`(?U:id="product2"[\S\s]+0 Available[\S\s]+product3)`, "https://my.frantech.ca/cart.php", "buyvm的LV RYZEN KVM 1GB:"}
	for {
		pa1.getinfo()
                pa2.getinfo()
		time.Sleep(6e10)
	}
}

能匹配到0 available就说明没有库存,匹配不到就是有库存

这样两个爬虫请求相同页面两次不太好,可以在修改下同一个页面,可以匹配多个正则然后输出结果,这样就只用请求一次了,有空再改

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:家里蹲的狐狸 » go语言学习例子No.6–监控VPS库存简单例子

分享到: 生成海报
avatar

评论 抢沙发

  • QQ号
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活