celestialgod

pokemon catcher

Mar 23rd, 2019
421
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.62 KB | None | 0 0
  1. import os, pycurl
  2. from io import BytesIO, StringIO
  3. from lxml import etree
  4.  
  5. class get_pokemon(object):
  6.   def __init__(self, save_folder):
  7.     self.index_url = 'https://pokemondb.net/pokedex/national'
  8.     self.img_url = 'https://img.pokemondb.net/artwork/{}.jpg'
  9.     self.save_folder = save_folder
  10.     if not os.path.exists(self.save_folder):
  11.       os.mkdir(self.save_folder)
  12.     self.make_index()
  13.  
  14.   def _GET(self, url):
  15.     buffer = BytesIO()
  16.     c = pycurl.Curl()
  17.     c.setopt(c.URL, url)
  18.     c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36')
  19.     c.setopt(c.WRITEDATA, buffer)
  20.     c.perform()
  21.     c.close()
  22.     return buffer
  23.    
  24.   def make_index(self):
  25.     buffer = self._GET(self.index_url)
  26.     html_doc = etree.HTML(buffer.getvalue())
  27.     self.span = html_doc.findall(".//span[@class='infocard-lg-data text-muted']")
  28.     self.pokemon_index = {s.find("./small").text:s.find("./a").text.lower() for s in span}
  29.  
  30.   def get_pokemon(self, _id):
  31.     pokemon_name = self.pokemon_index["#" + format(_id, "03d")]
  32.     if set(pokemon_name) & set("♀♂é"):
  33.       pokemon_name = pokemon_name.replace("♀", "-f").replace("♂", "-m").replace("é", "e")
  34.     img_url = self.img_url
  35.     url = img_url.format(pokemon_name)
  36.     img = self._GET(url)
  37.     filename = "%03d_%s.jpg" % (_id, pokemon_name)
  38.     with open(os.path.join(self.save_folder, filename), 'wb') as out:
  39.       out.write(img.getbuffer())
  40.      
  41. pokemon_ball = get_pokemon(os.path.join(os.getcwd(), "pokemon"))
  42. for i in range(1, 810):
  43.   pokemon_ball.get_pokemon(i)
Advertisement
Add Comment
Please, Sign In to add comment