由于工作原因,最近需要用到批量查询手机归属地的功能,研究了一下,主要有3种方式,这3种方式都有其各自的优缺点。废话不说,马上就开始吧:
1.Excelexcel有非常强大的功能,有各自强大的函数库,还能联网获取网页代码。
注意:仅支持office 2013以后版本,且wps不支持,以下几种查询时,都建议隐藏后四位,因为查询接口仅需前面7位即可,使用完整手机号码,有泄露隐私风险
1)首先,在第一行A1中输入你要查询的手机号码:
2)然后,在B1输入
="shouji.51240.com/"&A1&"__shouji/"
记得,所有的标的符号都是英文字符的,否则excel的函数无法运行。输入后会发现B2变成如下图所示:
![4299cae94128ec4a85e89b910041ffb8.png](https://i-blog.csdnimg.cn/blog_migrate/3dcb6f20fd4869cc9fd7f63c30631209.jpeg)
3)最后,在C1输入
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(WEBSERVICE(B1),FIND("title",WEBSERVICE(B1))+18,11),"-",""),"手",""),"机","")
点击回车,C1就会出现下图的结果:
![16b1eefc3e5f7ba5ee39ee82692b879c.png](https://i-blog.csdnimg.cn/blog_migrate/bebb37924cad249a3c7c052b6903f1b7.jpeg)
原理是这样的:如下图所示,使用shouji.51240.com这个网站的归属地查询功能,然后在B2里填入查询的手机号码作为查询域名的后缀,最后用excel中的WEBSERVICE()函数进行获取网页的源码,也就是C1中的“WEBSERVICE(B1)”部分,然后使用SUBSTITUE等函数将所需要的部分截取出来,也就是最后的结果。
但是该方法的优缺点比较明显,有点是操作非常快,但是缺点是当数据量比较大的时候,excel直接会崩溃,只能用于查询数据量比较少的操作。而且,WEBSERVICE函数只有windows中excel2013和excel2016版本才支持。
2.网站上传文件这个方法就比较推荐了,操作起来比excel更加简单,适合纯小白使用。传送门:https://it365.gitlab.io/zh-cn/phone-helper/?d8k4。
3.Python查询手机号码的归属地用到phone这个库:
这里需要用到两个库:xlrd和xlwt,xlrd是用来读excel,xlwt是用来写excel的。如果用Anaconda的话这两个库就不需要pip安装了,只需要安装phone库即可。phone库的使用超级简单,返回的是字典dict格式。
而批量获取的经常是在excel准备好一批手机号码,然后读取excel文件中的数据,然后再进行查询输出到新的excel中:
from phone import Phone
import xlrd
import xlwt
def Get_Excel_data():
file = 'Tel.xlsx' #电话号码存储的excle表
re1 = xlrd.open_workbook(file)
outwb = xlwt.Workbook() #创建工作簿
outws = outwb.add_sheet("new") #在工作簿中新建一个工作表new
# 读取第一个sheet
ws = re1.sheet_by_index(0)
rows = ws.nrows
# print(rows)
outws.write(0, 0, u'电话号') #给新表的第一行添加对应的标签
outws.write(0, 1, u'省份')
outws.write(0, 2, u'城市')
outws.write(0, 4, u'运营商')
for i in range(0, rows):
Telvalue = int(ws.cell_value(i, 0))
# print(Telvalue)
data = Phone().find(Telvalue)
print(data)
outws.write(i + 1, 0, Telvalue) #给新表的个列添加对应的数据
try:
outws.write(i + 1, 1, data['province'])
outws.write(i + 1, 2, data['city'])
outws.write(i + 1, 3, data['area_code'])
outws.write(i + 1, 4, data['phone_type'])
outwb.save(r'New_Tel.xls')
except:
print("none")
Get_Excel_data()
![db5fc84a5b0a9ef3b78c58d4ddaaee85.png](https://i-blog.csdnimg.cn/blog_migrate/27814f983008fe049cf9f66890726989.png)