欢迎光临
我们一直在努力

go语言学习例子No.2–爬虫爬取手机号码

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)
	}
}

类似的修改正则表达式可以简单的爬取别的信息

 收藏 (0) 打赏

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

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:家里蹲的狐狸 » go语言学习例子No.2–爬虫爬取手机号码

分享到: 生成海报
avatar

评论 抢沙发

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

登录

忘记密码 ?

切换登录

注册

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