Skip to content

Instantly share code, notes, and snippets.

@cjwinchester
Last active August 29, 2015 14:26
Show Gist options
  • Save cjwinchester/557aaa74d8a34ded8509 to your computer and use it in GitHub Desktop.
Save cjwinchester/557aaa74d8a34ded8509 to your computer and use it in GitHub Desktop.
Scrape/download CIA "flags of the world," plus JSON to convert b/t ISO 3166-1 alpha-two and alpha-three country codes
import requests
from bs4 import *
import time
import json
import os
import glob
# download flag gifs from CIA website
def getFlags():
base = "https://www.cia.gov/library/publications/the-world-factbook/docs/flagsoftheworld.html"
r = requests.get(base)
soup = BeautifulSoup(r.text)
flags = soup.find_all('img', {'class': 'fotw'})
ls = []
for flag in flags:
dict = {}
ccode = flag['countrycode']
name = flag['countryname']
print name
fn = flag['src'].split("/")[-1]
dict['filename'] = ccode.lower() + ".gif"
dict['code'] = ccode
dict['name'] = name
z = requests.get("https://www.cia.gov/library/publications/the-world-factbook/graphics/flags/large/" + fn, stream=True)
with open(fn.replace("-lgflag",""), 'wb') as fd:
for chunk in z.iter_content(1024):
fd.write(chunk)
ls.append(dict)
time.sleep(2)
with open("flags.json", "wb") as fj:
fj.write(json.dumps(ls))
# get country code data
def getCodes():
base = "https://www.cia.gov/library/publications/the-world-factbook/appendix/appendix-d.html"
ls = []
r = requests.get(base)
soup = BeautifulSoup(r.text)
ul = soup.find("ul", {"id":"GetAppendix_D"})
for thing in ul.find_all('li'):
dict = {}
cells = thing.div.table.tbody.tr.find_all('td')
name = cells[0].text.strip()
gec = cells[1].text.strip()
print name
gr = cells[2]
them = gr.table.tbody.tr.find_all('td')
two = them[0].text.strip()
three = them[1].text.strip()
isonum = them[2].text.strip()
dict['name'] = name
dict['two'] = two
dict['twoalt'] = gec
dict['three'] = three
dict['isonum'] = isonum
ls.append(dict)
with open("flag-convert.json", "wb") as lulz:
lulz.write(json.dumps(ls))
# this is actually garbage, don't use
def convertFlag():
w = open("flag-convert.json", "rb").read()
womp = json.loads(w)
for file in glob.glob("*.gif"):
two = file.replace('.gif','').upper()
if len(two) < 3:
for d in womp:
try:
if d['two'] == two:
if d['three'] != "-":
print d['three']
os.rename(file, d['three'].lower() + '.gif')
elif d['twoalt'] == two:
if d['three'] != "-":
print d['three']
os.rename(file, d['three'].lower() + '.gif')
except:
continue
#getFlags()
#getCodes()
#convertFlag()
[{"iso2":"AF","iso3":"AFG","name":"Afghanistan"},{"iso2":"AX","iso3":"ALA","name":"Åland Islands"},{"iso2":"AL","iso3":"ALB","name":"Albania"},{"iso2":"DZ","iso3":"DZA","name":"Algeria"},{"iso2":"AS","iso3":"ASM","name":"American Samoa"},{"iso2":"AD","iso3":"AND","name":"Andorra"},{"iso2":"AO","iso3":"AGO","name":"Angola"},{"iso2":"AI","iso3":"AIA","name":"Anguilla"},{"iso2":"AQ","iso3":"ATA","name":"Antarctica"},{"iso2":"AG","iso3":"ATG","name":"Antigua and Barbuda"},{"iso2":"AR","iso3":"ARG","name":"Argentina"},{"iso2":"AM","iso3":"ARM","name":"Armenia"},{"iso2":"AW","iso3":"ABW","name":"Aruba"},{"iso2":"AU","iso3":"AUS","name":"Australia"},{"iso2":"AT","iso3":"AUT","name":"Austria"},{"iso2":"AZ","iso3":"AZE","name":"Azerbaijan"},{"iso2":"BS","iso3":"BHS","name":"Bahamas"},{"iso2":"BH","iso3":"BHR","name":"Bahrain"},{"iso2":"BD","iso3":"BGD","name":"Bangladesh"},{"iso2":"BB","iso3":"BRB","name":"Barbados"},{"iso2":"BY","iso3":"BLR","name":"Belarus"},{"iso2":"BE","iso3":"BEL","name":"Belgium"},{"iso2":"BZ","iso3":"BLZ","name":"Belize"},{"iso2":"BJ","iso3":"BEN","name":"Benin"},{"iso2":"BM","iso3":"BMU","name":"Bermuda"},{"iso2":"BT","iso3":"BTN","name":"Bhutan"},{"iso2":"BO","iso3":"BOL","name":"Bolivia, Plurinational State of"},{"iso2":"BQ","iso3":"BES","name":"Bonaire, Sint Eustatius and Saba"},{"iso2":"BA","iso3":"BIH","name":"Bosnia and Herzegovina"},{"iso2":"BW","iso3":"BWA","name":"Botswana"},{"iso2":"BV","iso3":"BVT","name":"Bouvet Island"},{"iso2":"BR","iso3":"BRA","name":"Brazil"},{"iso2":"IO","iso3":"IOT","name":"British Indian Ocean Territory"},{"iso2":"BN","iso3":"BRN","name":"Brunei Darussalam"},{"iso2":"BG","iso3":"BGR","name":"Bulgaria"},{"iso2":"BF","iso3":"BFA","name":"Burkina Faso"},{"iso2":"BI","iso3":"BDI","name":"Burundi"},{"iso2":"CV","iso3":"CPV","name":"Cabo Verde"},{"iso2":"KH","iso3":"KHM","name":"Cambodia"},{"iso2":"CM","iso3":"CMR","name":"Cameroon"},{"iso2":"CA","iso3":"CAN","name":"Canada"},{"iso2":"KY","iso3":"CYM","name":"Cayman Islands"},{"iso2":"CF","iso3":"CAF","name":"Central African Republic"},{"iso2":"TD","iso3":"TCD","name":"Chad"},{"iso2":"CL","iso3":"CHL","name":"Chile"},{"iso2":"CN","iso3":"CHN","name":"China"},{"iso2":"CX","iso3":"CXR","name":"Christmas Island"},{"iso2":"CC","iso3":"CCK","name":"Cocos (Keeling) Islands"},{"iso2":"CO","iso3":"COL","name":"Colombia"},{"iso2":"KM","iso3":"COM","name":"Comoros"},{"iso2":"CG","iso3":"COG","name":"Congo"},{"iso2":"CD","iso3":"COD","name":"Congo, the Democratic Republic of the"},{"iso2":"CK","iso3":"COK","name":"Cook Islands"},{"iso2":"CR","iso3":"CRI","name":"Costa Rica"},{"iso2":"CI","iso3":"CIV","name":"Côte d'Ivoire"},{"iso2":"HR","iso3":"HRV","name":"Croatia"},{"iso2":"CU","iso3":"CUB","name":"Cuba"},{"iso2":"CW","iso3":"CUW","name":"Curaçao"},{"iso2":"CY","iso3":"CYP","name":"Cyprus"},{"iso2":"CZ","iso3":"CZE","name":"Czech Republic"},{"iso2":"DK","iso3":"DNK","name":"Denmark"},{"iso2":"DJ","iso3":"DJI","name":"Djibouti"},{"iso2":"DM","iso3":"DMA","name":"Dominica"},{"iso2":"DO","iso3":"DOM","name":"Dominican Republic"},{"iso2":"EC","iso3":"ECU","name":"Ecuador"},{"iso2":"EG","iso3":"EGY","name":"Egypt"},{"iso2":"SV","iso3":"SLV","name":"El Salvador"},{"iso2":"GQ","iso3":"GNQ","name":"Equatorial Guinea"},{"iso2":"ER","iso3":"ERI","name":"Eritrea"},{"iso2":"EE","iso3":"EST","name":"Estonia"},{"iso2":"ET","iso3":"ETH","name":"Ethiopia"},{"iso2":"FK","iso3":"FLK","name":"Falkland Islands (Malvinas)"},{"iso2":"FO","iso3":"FRO","name":"Faroe Islands"},{"iso2":"FJ","iso3":"FJI","name":"Fiji"},{"iso2":"FI","iso3":"FIN","name":"Finland"},{"iso2":"FR","iso3":"FRA","name":"France"},{"iso2":"GF","iso3":"GUF","name":"French Guiana"},{"iso2":"PF","iso3":"PYF","name":"French Polynesia"},{"iso2":"TF","iso3":"ATF","name":"French Southern Territories"},{"iso2":"GA","iso3":"GAB","name":"Gabon"},{"iso2":"GM","iso3":"GMB","name":"Gambia"},{"iso2":"GE","iso3":"GEO","name":"Georgia"},{"iso2":"DE","iso3":"DEU","name":"Germany"},{"iso2":"GH","iso3":"GHA","name":"Ghana"},{"iso2":"GI","iso3":"GIB","name":"Gibraltar"},{"iso2":"GR","iso3":"GRC","name":"Greece"},{"iso2":"GL","iso3":"GRL","name":"Greenland"},{"iso2":"GD","iso3":"GRD","name":"Grenada"},{"iso2":"GP","iso3":"GLP","name":"Guadeloupe"},{"iso2":"GU","iso3":"GUM","name":"Guam"},{"iso2":"GT","iso3":"GTM","name":"Guatemala"},{"iso2":"GG","iso3":"GGY","name":"Guernsey"},{"iso2":"GN","iso3":"GIN","name":"Guinea"},{"iso2":"GW","iso3":"GNB","name":"Guinea-Bissau"},{"iso2":"GY","iso3":"GUY","name":"Guyana"},{"iso2":"HT","iso3":"HTI","name":"Haiti"},{"iso2":"HM","iso3":"HMD","name":"Heard Island and McDonald Islands"},{"iso2":"VA","iso3":"VAT","name":"Holy See (Vatican City State)"},{"iso2":"HN","iso3":"HND","name":"Honduras"},{"iso2":"HK","iso3":"HKG","name":"Hong Kong"},{"iso2":"HU","iso3":"HUN","name":"Hungary"},{"iso2":"IS","iso3":"ISL","name":"Iceland"},{"iso2":"IN","iso3":"IND","name":"India"},{"iso2":"ID","iso3":"IDN","name":"Indonesia"},{"iso2":"IR","iso3":"IRN","name":"Iran, Islamic Republic of"},{"iso2":"IQ","iso3":"IRQ","name":"Iraq"},{"iso2":"IE","iso3":"IRL","name":"Ireland"},{"iso2":"IM","iso3":"IMN","name":"Isle of Man"},{"iso2":"IL","iso3":"ISR","name":"Israel"},{"iso2":"IT","iso3":"ITA","name":"Italy"},{"iso2":"JM","iso3":"JAM","name":"Jamaica"},{"iso2":"JP","iso3":"JPN","name":"Japan"},{"iso2":"JE","iso3":"JEY","name":"Jersey"},{"iso2":"JO","iso3":"JOR","name":"Jordan"},{"iso2":"KZ","iso3":"KAZ","name":"Kazakhstan"},{"iso2":"KE","iso3":"KEN","name":"Kenya"},{"iso2":"KI","iso3":"KIR","name":"Kiribati"},{"iso2":"KP","iso3":"PRK","name":"Korea, Democratic People's Republic of"},{"iso2":"KR","iso3":"KOR","name":"Korea, Republic of"},{"iso2":"KW","iso3":"KWT","name":"Kuwait"},{"iso2":"KG","iso3":"KGZ","name":"Kyrgyzstan"},{"iso2":"LA","iso3":"LAO","name":"Lao People's Democratic Republic"},{"iso2":"LV","iso3":"LVA","name":"Latvia"},{"iso2":"LB","iso3":"LBN","name":"Lebanon"},{"iso2":"LS","iso3":"LSO","name":"Lesotho"},{"iso2":"LR","iso3":"LBR","name":"Liberia"},{"iso2":"LY","iso3":"LBY","name":"Libya"},{"iso2":"LI","iso3":"LIE","name":"Liechtenstein"},{"iso2":"LT","iso3":"LTU","name":"Lithuania"},{"iso2":"LU","iso3":"LUX","name":"Luxembourg"},{"iso2":"MO","iso3":"MAC","name":"Macao"},{"iso2":"MK","iso3":"MKD","name":"Macedonia, the former Yugoslav Republic of"},{"iso2":"MG","iso3":"MDG","name":"Madagascar"},{"iso2":"MW","iso3":"MWI","name":"Malawi"},{"iso2":"MY","iso3":"MYS","name":"Malaysia"},{"iso2":"MV","iso3":"MDV","name":"Maldives"},{"iso2":"ML","iso3":"MLI","name":"Mali"},{"iso2":"MT","iso3":"MLT","name":"Malta"},{"iso2":"MH","iso3":"MHL","name":"Marshall Islands"},{"iso2":"MQ","iso3":"MTQ","name":"Martinique"},{"iso2":"MR","iso3":"MRT","name":"Mauritania"},{"iso2":"MU","iso3":"MUS","name":"Mauritius"},{"iso2":"YT","iso3":"MYT","name":"Mayotte"},{"iso2":"MX","iso3":"MEX","name":"Mexico"},{"iso2":"FM","iso3":"FSM","name":"Micronesia, Federated States of"},{"iso2":"MD","iso3":"MDA","name":"Moldova, Republic of"},{"iso2":"MC","iso3":"MCO","name":"Monaco"},{"iso2":"MN","iso3":"MNG","name":"Mongolia"},{"iso2":"ME","iso3":"MNE","name":"Montenegro"},{"iso2":"MS","iso3":"MSR","name":"Montserrat"},{"iso2":"MA","iso3":"MAR","name":"Morocco"},{"iso2":"MZ","iso3":"MOZ","name":"Mozambique"},{"iso2":"MM","iso3":"MMR","name":"Myanmar"},{"iso2":"NA","iso3":"NAM","name":"Namibia"},{"iso2":"NR","iso3":"NRU","name":"Nauru"},{"iso2":"NP","iso3":"NPL","name":"Nepal"},{"iso2":"NL","iso3":"NLD","name":"Netherlands"},{"iso2":"NC","iso3":"NCL","name":"New Caledonia"},{"iso2":"NZ","iso3":"NZL","name":"New Zealand"},{"iso2":"NI","iso3":"NIC","name":"Nicaragua"},{"iso2":"NE","iso3":"NER","name":"Niger"},{"iso2":"NG","iso3":"NGA","name":"Nigeria"},{"iso2":"NU","iso3":"NIU","name":"Niue"},{"iso2":"NF","iso3":"NFK","name":"Norfolk Island"},{"iso2":"MP","iso3":"MNP","name":"Northern Mariana Islands"},{"iso2":"NO","iso3":"NOR","name":"Norway"},{"iso2":"OM","iso3":"OMN","name":"Oman"},{"iso2":"PK","iso3":"PAK","name":"Pakistan"},{"iso2":"PW","iso3":"PLW","name":"Palau"},{"iso2":"PS","iso3":"PSE","name":"Palestine, State of"},{"iso2":"PA","iso3":"PAN","name":"Panama"},{"iso2":"PG","iso3":"PNG","name":"Papua New Guinea"},{"iso2":"PY","iso3":"PRY","name":"Paraguay"},{"iso2":"PE","iso3":"PER","name":"Peru"},{"iso2":"PH","iso3":"PHL","name":"Philippines"},{"iso2":"PN","iso3":"PCN","name":"Pitcairn"},{"iso2":"PL","iso3":"POL","name":"Poland"},{"iso2":"PT","iso3":"PRT","name":"Portugal"},{"iso2":"PR","iso3":"PRI","name":"Puerto Rico"},{"iso2":"QA","iso3":"QAT","name":"Qatar"},{"iso2":"RE","iso3":"REU","name":"Réunion"},{"iso2":"RO","iso3":"ROU","name":"Romania"},{"iso2":"RU","iso3":"RUS","name":"Russian Federation"},{"iso2":"RW","iso3":"RWA","name":"Rwanda"},{"iso2":"BL","iso3":"BLM","name":"Saint Barthélemy"},{"iso2":"SH","iso3":"SHN","name":"Saint Helena, Ascension and Tristan da Cunha"},{"iso2":"KN","iso3":"KNA","name":"Saint Kitts and Nevis"},{"iso2":"LC","iso3":"LCA","name":"Saint Lucia"},{"iso2":"MF","iso3":"MAF","name":"Saint Martin (French part)"},{"iso2":"PM","iso3":"SPM","name":"Saint Pierre and Miquelon"},{"iso2":"VC","iso3":"VCT","name":"Saint Vincent and the Grenadines"},{"iso2":"WS","iso3":"WSM","name":"Samoa"},{"iso2":"SM","iso3":"SMR","name":"San Marino"},{"iso2":"ST","iso3":"STP","name":"Sao Tome and Principe"},{"iso2":"SA","iso3":"SAU","name":"Saudi Arabia"},{"iso2":"SN","iso3":"SEN","name":"Senegal"},{"iso2":"RS","iso3":"SRB","name":"Serbia"},{"iso2":"SC","iso3":"SYC","name":"Seychelles"},{"iso2":"SL","iso3":"SLE","name":"Sierra Leone"},{"iso2":"SG","iso3":"SGP","name":"Singapore"},{"iso2":"SX","iso3":"SXM","name":"Sint Maarten (Dutch part)"},{"iso2":"SK","iso3":"SVK","name":"Slovakia"},{"iso2":"SI","iso3":"SVN","name":"Slovenia"},{"iso2":"SB","iso3":"SLB","name":"Solomon Islands"},{"iso2":"SO","iso3":"SOM","name":"Somalia"},{"iso2":"ZA","iso3":"ZAF","name":"South Africa"},{"iso2":"GS","iso3":"SGS","name":"South Georgia and the South Sandwich Islands"},{"iso2":"SS","iso3":"SSD","name":"South Sudan"},{"iso2":"ES","iso3":"ESP","name":"Spain"},{"iso2":"LK","iso3":"LKA","name":"Sri Lanka"},{"iso2":"SD","iso3":"SDN","name":"Sudan"},{"iso2":"SR","iso3":"SUR","name":"Suriname"},{"iso2":"SJ","iso3":"SJM","name":"Svalbard and Jan Mayen"},{"iso2":"SZ","iso3":"SWZ","name":"Swaziland"},{"iso2":"SE","iso3":"SWE","name":"Sweden"},{"iso2":"CH","iso3":"CHE","name":"Switzerland"},{"iso2":"SY","iso3":"SYR","name":"Syrian Arab Republic"},{"iso2":"TW","iso3":"TWN","name":"Taiwan, Province of China"},{"iso2":"TJ","iso3":"TJK","name":"Tajikistan"},{"iso2":"TZ","iso3":"TZA","name":"Tanzania, United Republic of"},{"iso2":"TH","iso3":"THA","name":"Thailand"},{"iso2":"TL","iso3":"TLS","name":"Timor-Leste"},{"iso2":"TG","iso3":"TGO","name":"Togo"},{"iso2":"TK","iso3":"TKL","name":"Tokelau"},{"iso2":"TO","iso3":"TON","name":"Tonga"},{"iso2":"TT","iso3":"TTO","name":"Trinidad and Tobago"},{"iso2":"TN","iso3":"TUN","name":"Tunisia"},{"iso2":"TR","iso3":"TUR","name":"Turkey"},{"iso2":"TM","iso3":"TKM","name":"Turkmenistan"},{"iso2":"TC","iso3":"TCA","name":"Turks and Caicos Islands"},{"iso2":"TV","iso3":"TUV","name":"Tuvalu"},{"iso2":"UG","iso3":"UGA","name":"Uganda"},{"iso2":"UA","iso3":"UKR","name":"Ukraine"},{"iso2":"AE","iso3":"ARE","name":"United Arab Emirates"},{"iso2":"GB","iso3":"GBR","name":"United Kingdom"},{"iso2":"US","iso3":"USA","name":"United States"},{"iso2":"UM","iso3":"UMI","name":"United States Minor Outlying Islands"},{"iso2":"UY","iso3":"URY","name":"Uruguay"},{"iso2":"UZ","iso3":"UZB","name":"Uzbekistan"},{"iso2":"VU","iso3":"VUT","name":"Vanuatu"},{"iso2":"VE","iso3":"VEN","name":"Venezuela, Bolivarian Republic of"},{"iso2":"VN","iso3":"VNM","name":"Viet Nam"},{"iso2":"VG","iso3":"VGB","name":"Virgin Islands, British"},{"iso2":"VI","iso3":"VIR","name":"Virgin Islands, U.S."},{"iso2":"WF","iso3":"WLF","name":"Wallis and Futuna"},{"iso2":"EH","iso3":"ESH","name":"Western Sahara"},{"iso2":"YE","iso3":"YEM","name":"Yemen"},{"iso2":"ZM","iso3":"ZMB","name":"Zambia"},{"iso2":"ZW","iso3":"ZWE","name":"Zimbabwe"}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment