-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscraper.py
81 lines (63 loc) · 16 KB
/
scraper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import pandas as pd
import requests
from bs4 import BeautifulSoup
import re, time
URLS = ["https://en.wikipedia.org/wiki/Mobile_Network_Codes_in_ITU_region_2xx_(Europe)",
'https://en.wikipedia.org/wiki/Mobile_Network_Codes_in_ITU_region_3xx_(North_America)',
'https://en.wikipedia.org/wiki/Mobile_Network_Codes_in_ITU_region_4xx_(Asia)',
'https://en.wikipedia.org/wiki/Mobile_Network_Codes_in_ITU_region_5xx_(Oceania)',
'https://en.wikipedia.org/wiki/Mobile_Network_Codes_in_ITU_region_6xx_(Africa)',
'https://en.wikipedia.org/wiki/Mobile_Network_Codes_in_ITU_region_7xx_(South_America)'
]
TABLE_CLASS = "wikitable sortable jquery-tablesorter"
final_list = []
for url in URLS:
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
tables = soup.find_all('table',{'class':"wikitable"})
final_list.append(tables)
def clean(t):
word1 = re.sub('\[[0-9]+\]', '', t)
word1 = " ".join(re.findall("[a-zA-Z0-9\.\%]+", word1))
return word1
def mcc_fix(mcc):
m = mcc
if 'India' in mcc:
m = m[-3:]
if 'United' in mcc:
m = m[-3:]
if 'Japan' in mcc:
m = m[-3:]
# if 'United States of America - US - 313 313' in mcc:
# m = '313'
# if 'United States of America - US - 314 314' in mcc:
# m = '314'
return m
else:
return m
df = pd.concat(pd.read_html(str(final_list), converters={'MCC':str, 'MNC':str}), axis=0)
df['MCC'] = df['MCC'].apply(lambda x: mcc_fix(x))
countries = {'289': {'Country': 'Abkhazia', 'Iso': 'ge', 'CC': '7'}, '412': {'Country': 'Afghanistan', 'Iso': 'af', 'CC': '93'}, '276': {'Country': 'Albania', 'Iso': 'al', 'CC': '355'}, '603': {'Country': 'Algeria', 'Iso': 'dz', 'CC': '213'}, '544': {'Country': 'American Samoa', 'Iso': 'as', 'CC': '684'}, '213': {'Country': 'Andorra', 'Iso': 'ad', 'CC': '376'}, '631': {'Country': 'Angola', 'Iso': 'ao', 'CC': '244'}, '365': {'Country': 'Anguilla', 'Iso': 'ai', 'CC': '1264'}, '344': {'Country': 'Antigua and Barbuda', 'Iso': 'ag', 'CC': '1268'}, '722': {'Country': 'Argentina Republic', 'Iso': 'ar', 'CC': '54'}, '283': {'Country': 'Armenia', 'Iso': 'am', 'CC': '374'}, '363': {'Country': 'Aruba', 'Iso': 'aw', 'CC': '297'}, '505': {'Country': 'Australia', 'Iso': 'au', 'CC': '61'}, '232': {'Country': 'Austria', 'Iso': 'at', 'CC': '43'}, '400': {'Country': 'Azerbaijan', 'Iso': 'az', 'CC': '994'}, '364': {'Country': 'Bahamas', 'Iso': 'bs', 'CC': '1242'}, '426': {'Country': 'Bahrain', 'Iso': 'bh', 'CC': '973'}, '470': {'Country': 'Bangladesh', 'Iso': 'bd', 'CC': '880'}, '342': {'Country': 'Barbados', 'Iso': 'bb', 'CC': '1246'}, '257': {'Country': 'Belarus', 'Iso': 'by', 'CC': '375'}, '206': {'Country': 'Belgium', 'Iso': 'be', 'CC': '32'}, '702': {'Country': 'Belize', 'Iso': 'bz', 'CC': '501'}, '616': {'Country': 'Benin', 'Iso': 'bj', 'CC': '229'}, '350': {'Country': 'Bermuda', 'Iso': 'bm', 'CC': '1441'}, '402': {'Country': 'Bhutan', 'Iso': 'bt', 'CC': '975'}, '736': {'Country': 'Bolivia', 'Iso': 'bo', 'CC': '591'}, '218': {'Country': 'Bosnia & Herzegov.', 'Iso': 'ba', 'CC': '387'}, '652': {'Country': 'Botswana', 'Iso': 'bw', 'CC': '267'}, '724': {'Country': 'Brazil', 'Iso': 'br', 'CC': '55'}, '348': {'Country': 'British Virgin Islands', 'Iso': 'vg', 'CC': '284'}, '528': {'Country': 'Brunei Darussalam', 'Iso': 'bn', 'CC': '673'}, '284': {'Country': 'Bulgaria', 'Iso': 'bg', 'CC': '359'}, '613': {'Country': 'Burkina Faso', 'Iso': 'bf', 'CC': '226'}, '642': {'Country': 'Burundi', 'Iso': 'bi', 'CC': '257'}, '456': {'Country': 'Cambodia', 'Iso': 'kh', 'CC': '855'}, '624': {'Country': 'Cameroon', 'Iso': 'cm', 'CC': '237'}, '302': {'Country': 'Canada', 'Iso': 'ca', 'CC': '1'}, '625': {'Country': 'Cape Verde', 'Iso': 'cv', 'CC': '238'}, '346': {'Country': 'Cayman Islands', 'Iso': 'ky', 'CC': '1345'}, '623': {'Country': 'Central African Rep.', 'Iso': 'cf', 'CC': '236'}, '622': {'Country': 'Chad', 'Iso': 'td', 'CC': '235'}, '730': {'Country': 'Chile', 'Iso': 'cl', 'CC': '56'}, '460': {'Country': 'China', 'Iso': 'cn', 'CC': '86'}, '732': {'Country': 'Colombia', 'Iso': 'co', 'CC': '57'}, '654': {'Country': 'Comoros', 'Iso': 'km', 'CC': '269'}, '630': {'Country': 'Congo, Dem. Rep.', 'Iso': 'cd', 'CC': '243'}, '629': {'Country': 'Congo, Republic', 'Iso': 'cg', 'CC': '242'}, '548': {'Country': 'Cook Islands', 'Iso': 'ck', 'CC': '682'}, '712': {'Country': 'Costa Rica', 'Iso': 'cr', 'CC': '506'}, '219': {'Country': 'Croatia', 'Iso': 'hr', 'CC': '385'}, '368': {'Country': 'Cuba', 'Iso': 'cu', 'CC': '53'}, '362': {'Country': 'Netherlands Antilles', 'Iso': 'an', 'CC': '599'}, '280': {'Country': 'Cyprus', 'Iso': 'cy', 'CC': '357'}, '230': {'Country': 'Czech Rep.', 'Iso': 'cz', 'CC': '420'}, '238': {'Country': 'Denmark', 'Iso': 'dk', 'CC': '45'}, '638': {'Country': 'Djibouti', 'Iso': 'dj', 'CC': '253'}, '366': {'Country': 'Dominica', 'Iso': 'dm', 'CC': '1767'}, '370': {'Country': 'Dominican Republic', 'Iso': 'do', 'CC': '1809'}, '740': {'Country': 'Ecuador', 'Iso': 'ec', 'CC': '593'}, '602': {'Country': 'Egypt', 'Iso': 'eg', 'CC': '20'}, '706': {'Country': 'El Salvador', 'Iso': 'sv', 'CC': '503'}, '627': {'Country': 'Equatorial Guinea', 'Iso': 'gq', 'CC': '240'}, '657': {'Country': 'Eritrea', 'Iso': 'er', 'CC': '291'}, '248': {'Country': 'Estonia', 'Iso': 'ee', 'CC': '372'}, '636': {'Country': 'Ethiopia', 'Iso': 'et', 'CC': '251'}, '750': {'Country': 'Falkland Islands (Malvinas)', 'Iso': 'fk', 'CC': '500'}, '288': {'Country': 'Faroe Islands', 'Iso': 'fo', 'CC': '298'}, '542': {'Country': 'Fiji', 'Iso': 'fj', 'CC': '679'}, '244': {'Country': 'Finland', 'Iso': 'fi', 'CC': '358'}, '208': {'Country': 'France', 'Iso': 'fr', 'CC': '33'}, '340': {'Country': 'Martinique (French Department of)', 'Iso': 'mq', 'CC': '596'}, '547': {'Country': 'French Polynesia', 'Iso': 'pf', 'CC': '689'}, '628': {'Country': 'Gabon', 'Iso': 'ga', 'CC': '241'}, '607': {'Country': 'Gambia', 'Iso': 'gm', 'CC': '220'}, '282': {'Country': 'Georgia', 'Iso': 'ge', 'CC': '995'}, '262': {'Country': 'Germany', 'Iso': 'de', 'CC': '49'}, '620': {'Country': 'Ghana', 'Iso': 'gh', 'CC': '233'}, '266': {'Country': 'Gibraltar', 'Iso': 'gi', 'CC': '350'}, '202': {'Country': 'Greece', 'Iso': 'gr', 'CC': '30'}, '290': {'Country': 'Greenland', 'Iso': 'gl', 'CC': '299'}, '352': {'Country': 'Grenada', 'Iso': 'gd', 'CC': '1473'}, '310': {'Country': 'United States', 'Iso': 'us', 'CC': '1'}, '311': {'Country': 'United States', 'Iso': 'us', 'CC': '1'}, '313': {'Country': 'United States', 'Iso': 'us', 'CC': '1'}, '315': {'Country': 'United States', 'Iso': 'us', 'CC': '1'},'314': {'Country': 'United States', 'Iso': 'us', 'CC': '1'},'704': {'Country': 'Guatemala', 'Iso': 'gt', 'CC': '502'}, '611': {'Country': 'Guinea', 'Iso': 'gn', 'CC': '224'}, '632': {'Country': 'Guinea-Bissau', 'Iso': 'gw', 'CC': '245'}, '738': {'Country': 'Guyana', 'Iso': 'gy', 'CC': '592'}, '372': {'Country': 'Haiti', 'Iso': 'ht', 'CC': '509'}, '708': {'Country': 'Honduras', 'Iso': 'hn', 'CC': '504'}, '454': {'Country': 'Hongkong, China', 'Iso': 'hk', 'CC': '852'}, '216': {'Country': 'Hungary', 'Iso': 'hu', 'CC': '36'}, '274': {'Country': 'Iceland', 'Iso': 'is', 'CC': '354'}, '404': {'Country': 'India', 'Iso': 'in', 'CC': '91'}, '405': {'Country': 'India', 'Iso': 'in', 'CC': '91'}, '510': {'Country': 'Indonesia', 'Iso': 'id', 'CC': '62'}, '901': {'Country': 'Satellite Networks', 'Iso': None, 'CC': '870'}, '432': {'Country': 'Iran', 'Iso': 'ir', 'CC': '98'}, '418': {'Country': 'Iraq', 'Iso': 'iq', 'CC': '964'}, '272': {'Country': 'Ireland', 'Iso': 'ie', 'CC': '353'}, '425': {'Country': 'Palestinian Territory', 'Iso': 'ps', 'CC': '970'}, '222': {'Country': 'Italy', 'Iso': 'it', 'CC': '39'}, '612': {'Country': 'Ivory Coast', 'Iso': 'ci', 'CC': '225'}, '338': {'Country': 'Jamaica', 'Iso': 'jm', 'CC': '1876'}, '440': {'Country': 'Japan', 'Iso': 'jp', 'CC': '81'}, '441': {'Country': 'Japan', 'Iso': 'jp', 'CC': '81'}, '416': {'Country': 'Jordan', 'Iso': 'jo', 'CC': '962'}, '401': {'Country': 'Kazakhstan', 'Iso': 'kz', 'CC': '7'}, '639': {'Country': 'Kenya', 'Iso': 'ke', 'CC': '254'}, '545': {'Country': 'Kiribati', 'Iso': 'ki', 'CC': '686'}, '467': {'Country': "Korea N., Dem. People's Rep.", 'Iso': 'kp', 'CC': '850'}, '450': {'Country': 'Korea S, Republic of', 'Iso': 'kr', 'CC': '82'}, '221': {'Country': 'Kosovo', 'Iso': 'xk', 'CC': '383'}, '419': {'Country': 'Kuwait', 'Iso': 'kw', 'CC': '965'}, '437': {'Country': 'Kyrgyzstan', 'Iso': 'kg', 'CC': '996'}, '457': {'Country': 'Laos P.D.R.', 'Iso': 'la', 'CC': '856'}, '247': {'Country': 'Latvia', 'Iso': 'lv', 'CC': '371'}, '415': {'Country': 'Lebanon', 'Iso': 'lb', 'CC': '961'}, '651': {'Country': 'Lesotho', 'Iso': 'ls', 'CC': '266'}, '618': {'Country': 'Liberia', 'Iso': 'lr', 'CC': '231'}, '606': {'Country': 'Libya', 'Iso': 'ly', 'CC': '218'}, '295': {'Country': 'Liechtenstein', 'Iso': 'li', 'CC': '423'}, '246': {'Country': 'Lithuania', 'Iso': 'lt', 'CC': '370'}, '270': {'Country': 'Luxembourg', 'Iso': 'lu', 'CC': '352'}, '455': {'Country': 'Macao, China', 'Iso': 'mo', 'CC': '853'}, '294': {'Country': 'Macedonia', 'Iso': 'mk', 'CC': '389'}, '646': {'Country': 'Madagascar', 'Iso': 'mg', 'CC': '261'}, '650': {'Country': 'Malawi', 'Iso': 'mw', 'CC': '265'}, '502': {'Country': 'Malaysia', 'Iso': 'my', 'CC': '60'}, '472': {'Country': 'Maldives', 'Iso': 'mv', 'CC': '960'}, '610': {'Country': 'Mali', 'Iso': 'ml', 'CC': '223'}, '278': {'Country': 'Malta', 'Iso': 'mt', 'CC': '356'}, '609': {'Country': 'Mauritania', 'Iso': 'mr', 'CC': '222'}, '617': {'Country': 'Mauritius', 'Iso': 'mu', 'CC': '230'}, '334': {'Country': 'Mexico', 'Iso': 'mx', 'CC': '52'}, '550': {'Country': 'Micronesia', 'Iso': 'fm', 'CC': '691'}, '259': {'Country': 'Moldova', 'Iso': 'md', 'CC': '373'}, '212': {'Country': 'Monaco', 'Iso': 'mc', 'CC': '377'}, '428': {'Country': 'Mongolia', 'Iso': 'mn', 'CC': '976'}, '297': {'Country': 'Montenegro', 'Iso': 'me', 'CC': '382'}, '354': {'Country': 'Montserrat', 'Iso': 'ms', 'CC': '1664'}, '604': {'Country': 'Morocco', 'Iso': 'ma', 'CC': '212'}, '643': {'Country': 'Mozambique', 'Iso': 'mz', 'CC': '258'}, '414': {'Country': 'Myanmar (Burma)', 'Iso': 'mm', 'CC': '95'}, '649': {'Country': 'Namibia', 'Iso': 'na', 'CC': '264'}, '429': {'Country': 'Nepal', 'Iso': 'np', 'CC': '977'}, '204': {'Country': 'Netherlands', 'Iso': 'nl', 'CC': '31'}, '546': {'Country': 'New Caledonia', 'Iso': 'nc', 'CC': '687'}, '530': {'Country': 'New Zealand', 'Iso': 'nz', 'CC': '64'}, '710': {'Country': 'Nicaragua', 'Iso': 'ni', 'CC': '505'}, '614': {'Country': 'Niger', 'Iso': 'ne', 'CC': '227'}, '621': {'Country': 'Nigeria', 'Iso': 'ng', 'CC': '234'}, '555': {'Country': 'Niue', 'Iso': 'nu', 'CC': '683'}, '242': {'Country': 'Norway', 'Iso': 'no', 'CC': '47'}, '422': {'Country': 'Oman', 'Iso': 'om', 'CC': '968'}, '410': {'Country': 'Pakistan', 'Iso': 'pk', 'CC': '92'}, '552': {'Country': 'Palau (Republic of)', 'Iso': 'pw', 'CC': '680'}, '714': {'Country': 'Panama', 'Iso': 'pa', 'CC': '507'}, '537': {'Country': 'Papua New Guinea', 'Iso': 'pg', 'CC': '675'}, '744': {'Country': 'Paraguay', 'Iso': 'py', 'CC': '595'}, '716': {'Country': 'Peru', 'Iso': 'pe', 'CC': '51'}, '515': {'Country': 'Philippines', 'Iso': 'ph', 'CC': '63'}, '260': {'Country': 'Poland', 'Iso': 'pl', 'CC': '48'}, '268': {'Country': 'Portugal', 'Iso': 'pt', 'CC': '351'}, '330': {'Country': 'Puerto Rico', 'Iso': 'pr', 'CC': None}, '427': {'Country': 'Qatar', 'Iso': 'qa', 'CC': '974'}, '647': {'Country': 'Reunion', 'Iso': 're', 'CC': '262'}, '226': {'Country': 'Romania', 'Iso': 'ro', 'CC': '40'}, '250': {'Country': 'Russian Federation', 'Iso': 'ru', 'CC': '79'}, '635': {'Country': 'Rwanda', 'Iso': 'rw', 'CC': '250'}, '356': {'Country': 'Saint Kitts and Nevis', 'Iso': 'kn', 'CC': '1869'}, '358': {'Country': 'Saint Lucia', 'Iso': 'lc', 'CC': '1758'}, '549': {'Country': 'Samoa', 'Iso': 'ws', 'CC': '685'}, '292': {'Country': 'San Marino', 'Iso': 'sm', 'CC': '378'}, '626': {'Country': 'Sao Tome & Principe', 'Iso': 'st', 'CC': '239'}, '420': {'Country': 'Saudi Arabia', 'Iso': 'sa', 'CC': '966'}, '608': {'Country': 'Senegal', 'Iso': 'sn', 'CC': '221'}, '220': {'Country': 'Serbia', 'Iso': 'rs', 'CC': '381'}, '633': {'Country': 'Seychelles', 'Iso': 'sc', 'CC': '248'}, '619': {'Country': 'Sierra Leone', 'Iso': 'sl', 'CC': '232'}, '525': {'Country': 'Singapore', 'Iso': 'sg', 'CC': '65'}, '231': {'Country': 'Slovakia', 'Iso': 'sk', 'CC': '421'}, '293': {'Country': 'Slovenia', 'Iso': 'si', 'CC': '386'}, '540': {'Country': 'Solomon Islands', 'Iso': 'sb', 'CC': '677'}, '637': {'Country': 'Somalia', 'Iso': 'so', 'CC': '252'}, '655': {'Country': 'South Africa', 'Iso': 'za', 'CC': '27'}, '659': {'Country': 'South Sudan (Republic of)', 'Iso': 'ss', 'CC': None}, '214': {'Country': 'Spain', 'Iso': 'es', 'CC': '34'}, '413': {'Country': 'Sri Lanka', 'Iso': 'lk', 'CC': '94'}, '308': {'Country': 'St. Pierre & Miquelon', 'Iso': 'pm', 'CC': '508'}, '360': {'Country': 'St. Vincent & Gren.', 'Iso': 'vc', 'CC': '1784'}, '634': {'Country': 'Sudan', 'Iso': 'sd', 'CC': '249'}, '746': {'Country': 'Suriname', 'Iso': 'sr', 'CC': '597'}, '653': {'Country': 'Swaziland', 'Iso': 'sz', 'CC': '268'}, '240': {'Country': 'Sweden', 'Iso': 'se', 'CC': '46'}, '228': {'Country': 'Switzerland', 'Iso': 'ch', 'CC': '41'}, '417': {'Country': 'Syrian Arab Republic', 'Iso': 'sy', 'CC': '963'}, '466': {'Country': 'Taiwan', 'Iso': 'tw', 'CC': '886'}, '436': {'Country': 'Tajikistan', 'Iso': 'tk', 'CC': '992'}, '640': {'Country': 'Tanzania', 'Iso': 'tz', 'CC': '255'}, '520': {'Country': 'Thailand', 'Iso': 'th', 'CC': '66'}, '514': {'Country': 'Timor-Leste', 'Iso': 'tp', 'CC': '670'}, '615': {'Country': 'Togo', 'Iso': 'tg', 'CC': '228'}, '539': {'Country': 'Tonga', 'Iso': 'to', 'CC': '676'}, '374': {'Country': 'Trinidad and Tobago', 'Iso': 'tt', 'CC': '1868'}, '605': {'Country': 'Tunisia', 'Iso': 'tn', 'CC': '216'}, '286': {'Country': 'Turkey', 'Iso': 'tr', 'CC': '90'}, '438': {'Country': 'Turkmenistan', 'Iso': 'tm', 'CC': '993'}, '376': {'Country': 'Virgin Islands, U.S.', 'Iso': 'vi', 'CC': '1340'}, '553': {'Country': 'Tuvalu', 'Iso': 'tv', 'CC': None}, '641': {'Country': 'Uganda', 'Iso': 'ug', 'CC': '256'}, '255': {'Country': 'Ukraine', 'Iso': 'ua', 'CC': '380'}, '424': {'Country': 'United Arab Emirates', 'Iso': 'ae', 'CC': '971'}, '430': {'Country': 'United Arab Emirates', 'Iso': 'ae', 'CC': '971'}, '431': {'Country': 'United Arab Emirates', 'Iso': 'ae', 'CC': '971'}, '234': {'Country': 'United Kingdom', 'Iso': 'gb', 'CC': '44'}, '235': {'Country': 'United Kingdom', 'Iso': 'gb', 'CC': '44'}, '312': {'Country': 'United States', 'Iso': 'us', 'CC': '1'}, '316': {'Country': 'United States', 'Iso': 'us', 'CC': '1'}, '748': {'Country': 'Uruguay', 'Iso': 'uy', 'CC': '598'}, '434': {'Country': 'Uzbekistan', 'Iso': 'uz', 'CC': '998'}, '541': {'Country': 'Vanuatu', 'Iso': 'vu', 'CC': '678'}, '734': {'Country': 'Venezuela', 'Iso': 've', 'CC': '58'}, '452': {'Country': 'Viet Nam', 'Iso': 'vn', 'CC': '84'}, '421': {'Country': 'Yemen', 'Iso': 'ye', 'CC': '967'}, '645': {'Country': 'Zambia', 'Iso': 'zm', 'CC': '260'}, '648': {'Country': 'Zimbabwe', 'Iso': 'zw', 'CC': '263'}, '543': {'Country': 'Wallis and Futuna', 'Iso': 'wf', 'CC': '381'}, '551': {'Country': 'Marshall Islands', 'Iso': 'mh', 'CC': '692'}, '536': {'Country': 'Nauru', 'Iso': 'nr', 'CC': '674'}, '554': {'Country': 'Tokelau', 'Iso': 'tk', 'CC': '690'}, '658': {'Country': 'Saint Helena, Ascension and Tristan da Cunha', 'Iso': 'sh', 'CC': '290'}, '742': {'Country': 'French Guiana (France)', 'Iso': 'gf', 'CC': '594'}}
def get_country(mcc):
try:
c = countries[mcc]['Country']
return c
except Exception as e:
return 'not found'
def get_iso(mcc):
try:
c = countries[mcc]['Iso']
return c
except Exception as e:
return 'not found'
df['Country'] = df['MCC'].apply(lambda x: get_country(x))
df['Iso'] = df['MCC'].apply(lambda x: get_iso(x))
df['References and notes'] = df['References and notes'].replace('\[[0-9]+\]','',regex=True)
# Creating TS for unique file name
ts = str(int(time.time()))
# Create JSON file
df.to_json('{}-mcc-mnc.json'.format(ts), orient='records')
# Create XLSX file
df.to_excel('{}mccmnc.xlsx'.format(ts), index = False)
# Create CSV file
df.to_csv('{}mccmnc.csv'.format(ts), index=False)