package main
import (
"io/ioutil"
"log"
"net/http"
"regexp"
)
func main() {
res, err := http.Get("https://haomagujia.com/")
if err != nil {
log.Fatal(err)
}
result, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
log.Fatal(err)
}
rephone := `1[345789]\d{9}` //手机号码正则
re := regexp.MustCompile(rephone) //匹配正则
s := re.FindAllString(string(result), -1) //返回字符串切片
var st string //定义一个字符串变量用来把字符串切片转换成字符串
for _, v := range s {
st = st + v + "\n"
}
//再把字符串转换成字节切片输入到文件
err = ioutil.WriteFile("abc.txt", []byte(st), 0777)
if err != nil {
log.Fatal(err)
}
}
都堆在main函数里不好看,简化一下
package main
import (
"io/ioutil"
"log"
"net/http"
"regexp"
)
func getinfo(s, r string) []string { //定义函数,接收地址返回获取到的字节流网页源码
res, err := http.Get(s)
if err != nil {
log.Fatal(err)
}
result, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
log.Fatal(err)
}
re := regexp.MustCompile(r) //匹配正则
st := re.FindAllString(string(result), -1) //返回字符串切片,-1表示全部,1表示匹配1个,2就匹配2个
return st
}
func getstring(s []string) string {
var st string
for _, v := range s {
st = st + v + "\n" //字符串拼接
}
return st
}
func main() {
result := getinfo("https://haomagujia.com/", `1[345789]\d{9}`)
st := getstring(result) //定义一个字符串变量用来把字符串切片转换成字符串
//再把字符串转换成字节切片输入到文件
err := ioutil.WriteFile("abc.txt", []byte(st), 0777)
if err != nil {
log.Fatal(err)
}
}
当然可以把两个函数合成一个函数,随便你
我们再用结构体和方法来实现一下,和上面的同理
package main
import (
"io/ioutil"
"log"
"net/http"
"regexp"
)
type pachong struct {
re string
url string
}
func (p *pachong) getinfo() []string { //爬虫结构体的getinfo方法
res, err := http.Get(p.url)
if err != nil {
log.Fatal(err)
}
result, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
log.Fatal(err)
}
re := regexp.MustCompile(p.re) //匹配正则
s := re.FindAllString(string(result), -1) //返回字符串切片,-1表示全部,1表示匹配1个,2就匹配2个
return s
}
func (p *pachong) getstring(s []string) []byte { //爬虫结构体的getstring方法
var st string
for _, v := range s {
st = st + v + "\n" //字符串拼接
}
return []byte(st)
}
func main() {
pa := &pachong{`1[345789]\d{9}`, "https://haomagujia.com/"}
result := pa.getinfo()
st := pa.getstring(result) //定义一个字符串变量用来把字符串切片转换成字符串
//再把字符串转换成字节切片输入到文件
err := ioutil.WriteFile("abc.txt", st, 0777)
if err != nil {
log.Fatal(err)
}
}
类似的修改正则表达式可以简单的爬取别的信息