如何快速找到全世界所有国家的电话区号?

python之禅

共 1030字,需浏览 3分钟

 ·

2022-03-25 15:14

有这样的一个需求,收到国外手机号发来的信息,我想知道这是哪个国家的手机号,这个国家的区号是多少?怎么批量操作?

"phone":"+79000381454"

如何快速解决这个问题呢?

有那么几种方法,直接去网上搜,看看有没有现成的库可以用。手里如果有几十几百个手机号要确认, 那种在线的服务临时逐个手动查肯定不现实。不过你倒是可以做这样的一个在线服务,肯定有需求。

第二个我能想到的是,直接爬,毕竟我是搞python的。很多主流网站都提供有手机号注册功能, 他们一般都支持国外手机号注册。

第一个能想到的就是知乎

87a1c733613059e4fbd6230cd2e3fecd.webp

它的注册页面有所有国家的区号

怎么爬最高效呢?

这有方法讲究,不需要去下载他的整个页面。因为我只是需要这一部分的数据而已。就不要再去发个请求把整个页面下载下来解析了。

直接开干

打开他的页面审查元素,直接拷贝父元素

c5ec896189702cbd922ff3727109ba7e.webp

我们用神器 BeautifulSoup 去解析这个html文档字符串

先找到所有buttons元素,因为国家名和区号都是放在button里面。

html = """ ..."""
from bs4 import BeautifulSoup
    soup = BeautifulSoup(html)
    buttons = soup.findAll("button")
    for button in buttons:
        print(button)

9cdf00792111f7ddb7a7dec635e421f1.webp

第二步直接提取里面的文本,并进行解析清洗

text = button.text
country_name, area_code = text.split(" ")
print(country_name, area_code[1:] )

因为每一行都是统一规律的结构化数据,国家和区号之间有空格,所有直接通过空格将字符串进行分割成两部分。 区号前面都有一个“+”,我直接用切片从1个字符开始切,得到真正的区号。

最后输出

中国香港 852
中国 86
美国 1
日本 81
中国澳门 853
中国台湾 886
马来西亚 60
澳大利亚 61
加拿大 1
英国 44
新加坡 65
德国 49
俄罗斯 7
埃及 20
南非 27
希腊 30
....

完事

完整代码:

def extract_area_code():
        """
        提取国家区号
        """

        html = """
        div class="Select-list" role="listbox">

为了方便大家索取,我把他转换成json

{'中国''86',
 '中国台湾''886',
 '中国澳门''853',
 '中国香港''852',
 '中非共和国''236',
 '丹麦''45',
 '乌克兰''380',
 '乌兹别克斯坦''998',
 '乌干达''256',
 '乌拉圭''598',
 '乍得''235',
 '也门''967',
 '亚美尼亚''374',
 '以色列''972',
 '伊拉克''964',
 '伊朗''98',
 '伯利兹''501',
 '俄罗斯''7',
 '保加利亚''359',
 '关岛''1671',
 '冈比亚''220',
 '冰岛''354',
 '几内亚''224',
 '列支敦士登''423',
 '刚果民主共和国''243',
 '利比亚''218',
 '利比里亚''231',
 '加拿大''1',
 '加纳''233',
 '加蓬''241',
 '匈牙利''36',
 '南非''27',
 '博茨瓦纳''267',
 '卡塔尔''974',
 '卢森堡''352',
 '印度''91',
 '印度尼西亚''62',
 '厄瓜多尔''593',
 '叙利亚''963',
 '古巴''53',
 '吉尔吉斯斯坦''996',
 '吉布提''253',
 '哈萨克斯坦''7',
 '哥伦比亚''57',
 '哥斯达黎加''506',
 '喀麦隆''237',
 '土库曼斯坦''993',
 '土耳其''90',
 '圣多美和普林西比''239',
 '圣露西亚''1758',
 '圣马力诺''378',
 '圭亚那''592',
 '坦桑尼亚''255',
 '埃及''20',
 '埃塞俄比亚''251',
 '塔吉克斯坦''992',
 '塞内加尔''221',
 '塞尔维亚共和国''381',
 '塞拉利昂''232',
 '塞浦路斯''357',
 '塞舌尔''248',
 '墨西哥''52',
 '多哥''228',
 '多明尼加共和国''1809',
 '奥地利''43',
 '委内瑞拉''58',
 '孟加拉国''880',
 '安哥拉''244',
 '安圭拉岛''1264',
 '安提瓜和巴布达''1268',
 '安道尔共和国''376',
 '尼加拉瓜''505',
 '尼日利亚''234',
 '尼日尔''227',
 '尼泊尔''977',
 '巴哈马''1242',
 '巴基斯坦''92',
 '巴巴多斯''1246',
 '巴布亚新几内亚''675',
 '巴拉圭''595',
 '巴拿马''507',
 '巴林''973',
 '巴西''55',
 '布基纳法索''226',
 '布隆迪''257',
 '希腊''30',
 '库克群岛''682',
 '开曼群岛''1345',
 '德国''49',
 '意大利''39',
 '所罗门群岛''677',
 '拉脱维亚''371',
 '挪威''47',
 '捷克''420',
 '摩尔多瓦''373',
 '摩洛哥''212',
 '摩纳哥''377',
 '文莱''673',
 '斐济''679',
 '斯威士兰''268',
 '斯洛伐克''421',
 '斯洛文尼亚''386',
 '斯里兰卡''94',
 '新加坡''65',
 '新西兰''64',
 '日本''81',
 '智利''56',
 '柬埔寨''855',
 '格林纳达''1473',
 '格鲁吉亚''995',
 '比利时''32',
 '毛里塔尼亚''222',
 '毛里求斯''230',
 '汤加''676',
 '沙特阿拉伯''966',
 '法国''33',
 '法属圭亚那''594',
 '法属波利尼西亚''689',
 '波兰''48',
 '波多黎各''1787',
 '泰国''66',
 '津巴布韦''263',
 '洪都拉斯''504',
 '海地''509',
 '澳大利亚''61',
 '爱尔兰''353',
 '爱沙尼亚''372',
 '牙买加''1876',
 '特立尼达和多巴哥''1868',
 '玻利维亚''591',
 '瑞典''46',
 '瑞士''41',
 '瓜地马拉''502',
 '白俄罗斯''375',
 '百慕大群岛''1441',
 '直布罗陀''350',
 '科威特''965',
 '科特迪瓦''225',
 '秘鲁''51',
 '突尼斯''216',
 '立陶宛''370',
 '索马里''252',
 '约旦''962',
 '纳米比亚''264',
 '缅甸''95',
 '罗马尼亚''40',
 '美国''1',
 '老挝''856',
 '肯尼亚''254',
 '芬兰''358',
 '苏丹''249',
 '苏里南''597',
 '英国''44',
 '荷兰''31',
 '莫桑比克''258',
 '莱索托''266',
 '菲律宾''63',
 '萨尔瓦多''503',
 '葡萄牙''351',
 '蒙古''976',
 '蒙特塞拉特岛''1664',
 '西班牙''34',
 '贝宁''229',
 '赞比亚''260',
 '越南''84',
 '阿塞拜疆''994',
 '阿富汗''93',
 '阿尔及利亚''213',
 '阿尔巴尼亚''355',
 '阿拉伯联合酋长国''971',
 '阿曼''968',
 '阿根廷''54',
 '阿森松岛''247',
 '韩国''82',
 '马尔代夫''960',
 '马拉维''265',
 '马提尼克''596',
 '马来西亚''60',
 '马耳他''356',
 '马达加斯加''261',
 '马里''223',
 '黎巴嫩''961'}

代码5分钟撸完,所以学点python还是非常有用的。但是写这篇文章加排版花了约1小时,可见写文章真是个累活。

另外,我的日更计划失败了,不是因为懒,而是另有它计划,后面也不会想着日更这个事了,想写了就写,没想好写就不写。

全文完!

愿每天都平安

任何疑问,欢迎留言或添微信上给我消息


最近更新:




关注Python之禅,每天学点Python

浏览 339
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报