您的位置:首页 > 编程语言 > Go语言

[置顶] 【go语言爬虫】go语言高性能抓取手机号码归属地、所属运营商

2017-05-25 09:43 381 查看
一、需求分析

根据手机号码获取手机号码的归属地和所属运营商类型

类似:四川 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)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: