一、需求分析
根据手机号码获取手机号码的归属地和所属运营商类型
类似:四川 18683339513 乐山 614000 0833 中国联通
二、运行效果
三、实现源代码
package main
//网址:https://github.com/M2shad0w/phone-go
//安装包:go get github.com/M2shad0w/phone-go
import (
"fmt"
"github.com/M2shad0w/phone-go"
"os"
"github.com/axgle/mahonia"
"encoding/csv"
"io"
"time"
)
func init() {
if err := m2phone.Init("C://phone.dat"); err != nil {
panic(err)
}
}
func mobile_spider() {
file, err := os.Open("C://mobile_order//m.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
decoder := mahonia.NewDecoder("gbk")
defer file.Close()
//创建excel文件
f, err := os.Create("C:/haha3.xlsx")
if err != nil {
panic(err)
}
defer f.Close()
reader := csv.NewReader(decoder.NewReader(file))
var type1 string
for {
record, err := reader.Read()
if err == io.EOF {
break
} else if err != nil {
fmt.Println("Error:", err)
return
}
phonestr := record[0]
ph, err := m2phone.Find(phonestr)
if err != nil {
fmt.Println("err:", err)
return
}
switch ph.Phonetype {
case 1:
type1 ="中国移动"
case 2:
type1 ="中国联通"
case 3:
type1 ="中国电信"
}
fmt.Println(ph.Province, phonestr, ph.City, ph.Zipcode, ph.Areacode, type1)
// 写入UTF-8 BOM
f.WriteString("\xEF\xBB\xBF")
f.WriteString(phonestr + "\t" + string(ph.Province) + "\t" + string(ph.City) + "\t" + string(ph.Zipcode) + "\t" + string(ph.Areacode) + "\t" + string(type1) + "\n")
}
}
func main() {
t1 := time.Now() // get current time
mobile_spider()
elapsed := time.Since(t1)
fmt.Println("爬虫结束,总共耗时: ", elapsed)
}