IT审计-地域分布之手机号码归属地解析
目录
手机号码归属地解析
根据《2020 首发业务若干问题解答》第 53 问, IT 审计需要对互联网终端客户情况是否存在异常进行分析。
其中的分析维度就包含了消费者的地域分布。
当我们拿到的客户的数据,可能发现并没有终端用户所在的省、市信息,
只有终端用户的手机号码或者身份证等信息。
为了能进行地域分布的统计分析,本文将介绍如何利用 Python 将手机号码解析出省、市信息。
这里一共介绍三种方式,相信能够应对所有的情况。
phone库
我们可以使用 python 的phone库。
github链接:https://github.com/ls0f/phone
安装
在终端中用pip
安装:
pip install phone
用法
用法非常简单,这里是官方文档示例:
from phone import Phone
p = Phone()
data = p.find(18190478611)
print(data)
执行结果:
{'phone': '18190478611', 'province': '四川', 'city': '德阳', 'zip_code': '618000', 'area_code': '0838', 'phone_type': '电信'}
我们可以从电话号码解析出:省、市、邮政编码、行政区划、运营商。
这个库更新时间为 2018 年10月。
由于作者似乎没有再更新,所以有些号码可能存在不能解析的情况。
phonenumbers库
除了上面的phone
库外,我们这里还有一个一直保持更新的 python 库: python-phonenumbers
安装
pip install phonenumbers
用法
from phonenumbers import geocoder
from phonenumbers import carrier
import phonenumbers
cn_number = phonenumbers.parse("18190478611", "CN") # "CN"地区代码表示中国
# 电话号码的省和城市
city = geocoder.description_for_number(cn_number, "zh") # "zh"描述语言表示中文简体
# 电话号码的运营商
carrier = carrier.name_for_number(cn_number, "zh") # "zh"描述语言表示中文简体
print(city,carrier)
执行结果:
四川省德阳市 中国电信
这个库的优点是一直在更新,但相对来说他把省和城市是合在一起的,需要我们自己去做一个拆分。
不过我们在以前也介绍过如何将地址拆分成省、市、区信息。
免费API接口
对于上面的库,如果还有查不到的情况,我们可以使用下面的免费接口代替:
import requests
import json
def parse_phone(phone_number):
url = 'https://cx.shouji.360.cn/phonearea.php?number=%s' % phone_number
response = requests.get(url)
json_str = json.loads(response.text)
return json_str['data']
data = parse_phone('18080073070')
print(data)
{'province': '四川', 'city': '成都', 'sp': '电信'}
这个 360 的接口,同样可以解析出省、市、运营商的信息。
通过三种解析电话号码归属地的方式,我们可以获取到地理位置信息,从而可以进一步去分析终端消费者的地域分布。
这对于 IPO 的项目的 IT 审计来说,应该是实用的。