Skip main navigation

Using Python to Download and Display Pokémon Images

You are going to use the pokebase, requests, and PIL external modules to download and display images of Pokémon.

You are going to use the pokebase, requests, and PIL external modules to download and display images of Pokémon.

 

Which Pokémon?

 

 

    1. Create a new Python program and save it as pokemon_simple.py.

       

 

    1. A function is a named block of code that performs a task. Functions are useful for keeping code organised, and because you can reuse them.

       

      Add the following code to create a fetch_pokemon function which will prompt the user to enter the name of a pokemon.

       

      def fetch_pokemon():
       name = input('Which Pokemon do you want to fetch? ')
       print("Fetching " + name)
      

       

 

    1. Call (run) the fetch_pokemon function by using its name, followed by a pair of round brackets.

       

      def fetch_pokemon():
       name = input('Which Pokemon do you want to fetch? ')
       print("Fetching " + name)
      
      fetch_pokemon()
      

       

 

    1. Run your program, you will be prompted to enter the name of a Pokémon.

       

 

 

Use Pokebase to Get a Pokémon

 

Now for the fun part! You are going to use pokebase to get some information about the Pokémon.

 

pokebase is a library that provides access to PokéAPI, a Pokémon API. API stands for application programming interface, which is a set of tools for building software applications — in this case, apps to do with Pokémon.

 

You can have a look at the website pokeapi.co to find out more about this particular API, and try out its online version. If you want to find out about the Pokémon Charizard for instance, you could search for pokemon/charizard.

 

 

The pokebase module gives us tools to write a program that does the same thing: to look up different Pokémon and get information about them.

 

You are also going to use the standard webbrowser module to display an image of the Pokémon you downloaded.

 

 

    1. Import the pokebase and webbrowser modules into your program, at the top of your program:

       

      from pokebase import pokemon
      import webbrowser
      

       

      Note: You have used two different methods for importing modules.

       

      from pokebase import pokemon imports a single function, pokemon, from the pokebase module. The pokemon function can be called directly by typing pokemon(). import webbrowser imports the whole webbrowser module. Functions within the webbrowser modules will have to be called first using the name of the module, for example webbrowser.open()

       

      The choice of which method to use depends on how your intend to use the module and structure your program. There is no right or wrong method.

       

 

    1. Modify the fetch_pokemon function to use the pokemon function to download your Pokémon.

       

      def fetch_pokemon():
       name = input('Which Pokemon do you want to fetch? ')
       print("Fetching " + name)
       poke = pokemon(name) 
      

       

      The poke variable holds all the attributes about your downloaded Pokémon, such as its weight, height, or abilities.

       

 

    1. Use print to output some information about your Pokémon:

       

       ...
       poke = pokemon(name)
       print(name + " weighs " + str(poke.weight))
      

       

 

    1. Run your program and enter the name of a Pokémon. If you don’t know any, type in charizard.

       

      The program above running, the message "charizard weighs 905" is displayed

       

      You can use the code print(dir(poke)) to output a list of all the attributes in the poke variable. What other information can you find out about your Pokémon?

       

 

    1. Modify the fetch_pokemon function to print out the sprites attributes.

       

       ...
       poke = pokemon(name)
       print(poke.sprites)
      

       

      Run the code and enter charizard when asked for a Pokémon. The data that is printed shows the links to different images of Charizard that the API gives you access to. To check out the images, you can copy and paste the links into a browser.

       

      Charizard

       

      You can use the webbrowser module to automatically open one of these images in your web browser.

       

 

    1. Add the following code to the bottom of your fetch_pokemon function to open the front_default sprite URL.

       

       ...
       poke = pokemon(name)
       webbrowser.open(poke.sprites.front_default)
      

       

      The program above running, with an image of charizard display in the web browser

       

 

 

Save the image using requests and PIL

 

To save the image on your computer you are going to use:

 

 

    • The requests module to get the data from the URL

 

    • Image from the PIL module to save the data as a gif

 

 

 

    1. Add this code to import the modules at the top of your program.

       

      from requests import get
      from PIL import Image
      from io import BytesIO
      

       

 

    1. Modify your fetch_pokemon function to download the image data using the get function from requests.

       

      def fetch_pokemon():
       ...
       poke = pokemon(name)
       pic = get(poke.sprites.front_default).content
      

       

      At the moment the pic is just a bunch of 1s and 0s on your computer, so it needs to be converted into something humans can look at using the io and PIL modules.

       

 

    1. Add this code to create an Image from the image data and save it as a gif file:

       

      def fetch_pokemon():
       ...
       pic = get(poke.sprites.front_default).content
       image = Image.open(BytesIO(pic))
       image.save('poke.gif')
      

       

 

Download and Display Different Pokémon

Once you type in the name of a Pokémon, your program will fetch the front_default image from the website and save it in the directory where you saved your Python file. Run the program a few times and enter different Pokémon, for example mewtwo or pikachu. After each run open the saved poke.gif file — the image file gets overwritten each time.

How do you think activities like this one could be used to encourage learners to use text-based programming languages?

This article is from the free online

Scratch to Python: Moving from Block- to Text-based Programming

Created by
FutureLearn - Learning For Life

Reach your personal and professional goals

Unlock access to hundreds of expert online courses and degrees from top universities and educators to gain accredited qualifications and professional CV-building certificates.

Join over 18 million learners to launch, switch or build upon your career, all at your own pace, across a wide range of topic areas.

Start Learning now