日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

12行代码获取1000万行手机号码归属地

發布時間:2023/12/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 12行代码获取1000万行手机号码归属地 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為網優工程師,你是否也曾奢望手里有一份全國手機號碼歸屬地對應表?學習Python后,我的這一夢想可以實現了。
今天偶然看到了一個直接獲取手機號碼歸屬地的模塊phone,今天咱們就來實戰一下。
號碼基本框架如下:

In [1]: import phone...:...: phoneNum = '1581339'...: info = phone.Phone().find(phoneNum)...: print(info) {'phone': '1581339', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'}

可以看到,核心代碼只有一行,作者也太牛逼了,膜拜。
我們來仔細看看,輸入信息是手機號碼前7位的字符串格式,輸出信息包含:手機號段、歸屬省份、歸屬城市、郵政編碼,區號,運營商歸屬。格式為一個字典。
獲取一個手機號段歸屬地的代碼有了,接下來我們來看看如何獲取多個號段的歸屬地呢?
我想到了range

In [2]: import phone...:...: for i in range(1581330, 1581339):...: # 注意輸入值要求是字符串...: info = phone.Phone().find(str(i))...: print(info)...: {'phone': '1581330', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'} {'phone': '1581331', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'} {'phone': '1581332', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'} {'phone': '1581333', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'} {'phone': '1581334', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'} {'phone': '1581335', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'} {'phone': '1581336', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'} {'phone': '1581337', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'} {'phone': '1581338', 'province': '廣東', 'city': '廣州', 'zip_code': '510000', 'area_code': '020', 'phone_type': '移動'}

使用range我們可以批量獲取信息了,仔細觀察結果,這個字典的key都是重復的,而且,字典也不方便用于后續處理,嘗試將dict轉換為list

In [3]: info.values() Out[3]: dict_values(['1581338', '廣東', '廣州', '510000', '020', '移動'])

我們還想將查詢結果存儲到文件,我自然想到了pandas,將list轉換為DataFrame,然后寫入csv就可以了

In [4] : import phone...: import pandas as pd...:...:...: phone_list=[]...:...: for i in range(1581330,1581339):...: info = phone.Phone().find(str(i))...: phone_list.append(info.values())...:...: # 創建DataFranme,并設置列名...: df=pd.DataFrame(phone_list, columns = ['手機號段', '省份', '地市', '郵編', '區號', '運營商'])...: df Out[4]:手機號段 省份 地市 郵編 區號 運營商 0 1581330 廣東 廣州 510000 020 移動 1 1581331 廣東 廣州 510000 020 移動 2 1581332 廣東 廣州 510000 020 移動 3 1581333 廣東 廣州 510000 020 移動 4 1581334 廣東 廣州 510000 020 移動 5 1581335 廣東 廣州 510000 020 移動 6 1581336 廣東 廣州 510000 020 移動 7 1581337 廣東 廣州 510000 020 移動 8 1581338 廣東 廣州 510000 020 移動

好像我們馬上就成功了呀,我們再試試別的號段

In [5] : import phone...: import pandas as pd...:...:...: phone_list=[]...:...: for i in range(1300000,1300010):...: info = phone.Phone().find(str(i))...: phone_list.append(info.values())...:...: # 創建DataFranme,并設置列名...: df=pd.DataFrame(phone_list, columns = ['手機號段', '省份', '地市', '郵編', '區號', '運營商'])...: df --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-16-a3119c124be5> in <module>7 for i in range(1300000,1300010):8 info = phone.Phone().find(str(i)) ----> 9 phone_list.append(info.values())1011 # 創建DataFranme,并設置列名AttributeError: 'NoneType' object has no attribute 'values'

。。。報錯了
什么原因呢?這是因為1300000號段不存在,怎么辦呢,程序容錯性太差了,不夠健壯,我們要嘗試加入容錯機制

In [6] : import phone...: import pandas as pd...:...: phone_list=[]...:...: for i in range(1300000,1300010):...: try:...: info = phone.Phone().find(str(i))...: phone_list.append(info.values())...: # 如果出錯,退出本次循環...: continue...: except(RuntimeError, TypeError, NameError, AttributeError):...: # 出錯后,直接跳過,不做任何處理...: pass...:...: df=pd.DataFrame(phone_list, columns = ['手機號段', '省份', '地市', '郵編', '區號', '運營商'])...: df Out[6]:手機號段 省份 地市 郵編 區號 運營商 0 1300001 江蘇 常州 213000 0519 聯通 1 1300002 安徽 合肥 230000 0551 聯通 2 1300003 四川 宜賓 644000 0831 聯通 3 1300004 四川 自貢 643000 0813 聯通 4 1300005 陜西 西安 710000 029 聯通 5 1300006 江蘇 南京 210000 025 聯通 6 1300007 陜西 西安 710000 029 聯通 7 1300008 湖北 武漢 430000 027 聯通 8 1300009 陜西 西安 710000 029 聯通

寫入csv,文件中含有中文,注意將文件編碼設置為gbk

In [29]: # 文件包含中文,將文件編碼設置為gbk...: df.to_csv('phone_list.csv', encoding='gbk')

打開生成的文件,看到如下信息,這就是我夢寐以求的那張表

完整代碼

import phone import pandas as pdphone_list=[]# 修改range范圍即可獲得1000萬行歸屬地信息 for i in range(1300000,1300010):try:info = phone.Phone().find(str(i)) phone_list.append(info.values())# 如果出錯,退出本次循環continueexcept(RuntimeError, TypeError, NameError, AttributeError):# 出錯后,直接跳過,不做任何處理pass df=pd.DataFrame(phone_list, columns = ['手機號段', '省份', '地市', '郵編', '區號', '運營商']) # 文件包含中文,將文件編碼設置為gbk df.to_csv('phone_list.csv', encoding='gbk')

想了解更多,掃碼關注。

總結

以上是生活随笔為你收集整理的12行代码获取1000万行手机号码归属地的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。