Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- import os
- import requests
- from bs4 import BeautifulSoup
- def dados_pokemon(poke_name):
- """Função que faz uma raspagem no site pokemn.db e devolve
- os dados do pokemon passado como parametro"""
- #Raspagem
- url = f'https://pokemondb.net/pokedex/{poke_name}'
- urlEgg = f'https://pokemondb.net/pokedex/{poke_name}/egg'
- urlDescription = f'https://www.pokemon.com/br/pokedex/{poke_name}'
- site = requests.get(url)
- egg=requests.get(urlEgg)
- desc = requests.get(urlDescription)
- soup = BeautifulSoup(site.content,'html.parser')
- soup2 = BeautifulSoup(egg.content,'html.parser')
- soup3 = BeautifulSoup(desc.content, 'html.parser')
- hps = soup.find_all('table', class_ ='vitals-table')
- hps2 = soup.find_all('a', class_ ='type-icon') #tipo
- hps3 = soup.find_all('span', class_ ='infocard-lg-data text-muted') #evolution
- hps4 = soup.find_all('span', class_ ='infocard infocard-arrow') #requiredLevel
- hps5 = soup3.find_all('div', class_='version-descriptions')
- poke_description =''
- for i in range(len(hps5)):
- poke_description+=hps5[i].get_text().replace('\n','')
- poke_description = poke_description.replace(' ','').strip()
- #------------------------------------------------------------------------------
- #resolvendo o caso da evolução
- evolve=''
- lastEvolve = hps3[len(hps3)-1].get_text().split()[1].lower()
- atualEvolve = poke_name
- crawledEvolve =hps3[1].get_text().split()[1].lower()
- if lastEvolve in atualEvolve:
- evolve = 'This is the last evolution'
- elif crawledEvolve in atualEvolve:
- evolve = lastEvolve.upper()
- else:
- evolve = crawledEvolve.upper()
- #-----------------------------------------
- #Raspagem para os egg moves
- hps5 = soup2.find('nav', class_='panel panel-nav')
- lista_eggs = hps5.findChildren()
- egg_move_list = []
- for i in lista_eggs:
- if i.get_text() not in 'Egg moves' and '\n' not in i.get_text():
- if i.get_text() not in egg_move_list:
- egg_move_list.append(i.get_text())
- #Aqui acabamos de encontrar os egg moves
- #--------------------------------------------------------------------------------------
- # daqui pra baixo faço acesso a uma api para conseguir os dados de moveset mais facil
- poke = 'charmander'
- url =f'https://pokeapi.co/api/v2/pokemon/{poke_name}'
- cha = requests.get(url).text
- dados = json.loads(cha)
- move_list = []
- for i in range (len(dados['moves'])):
- name = dados['moves'][i]['move']['name']
- required_level = int(dados['moves'][i]['version_group_details'][0]['level_learned_at'])
- if required_level==0:
- continue
- else:
- move_list.append(name)
- move_list.append(required_level)
- #Aqui acabamos de encontrar o moveset
- #--------------------------------------------------------------------------------------
- #transposição dos dados para uma lista
- full_text=[]
- for i in range(len(hps)):
- if hps[i].get_text()!='\n':
- full_text.append(f'{hps[i].get_text()}\n')
- #Criação do dicionario que será retornado com os dados
- data = {
- 'NOME':poke_name.upper(),
- 'HP':'',
- 'ATK':'',
- 'DEF':'',
- 'SPEED':'',
- 'SP.ATK' :'',
- 'SP.DEF':'',
- 'EXPERIENCE':'',
- 'EVOLVE': evolve,
- 'TIPO':hps2[0].get_text().upper(),
- 'CHANCE':'',
- 'REQUIREDLEVELEVOLVE':required_level,
- 'MOVESSET':move_list,
- 'EGGMOVES': egg_move_list if len(egg_move_list)!=0 else f'{poke_name.upper()} does not have any egg moves.',
- 'DESCRIPTION':poke_description
- }
- try:
- data['REQUIREDLEVELEVOLVE']=int(hps4[0].get_text().replace(')',' ').split()[1])
- except:
- text_level= hps4[0].get_text().replace('(','').replace(')','')
- if 'stone'in text_level.lower() :
- data['REQUIRED_ITEM'] = f'ITEM.{text_level.split()[1].upper()}_{text_level.split()[2].upper()}'
- data['REQUIREDLEVELEVOLVE'] = 1
- else:
- text_level = hps4[1].get_text().replace('(','').replace(')','')
- if 'stone'in text_level.lower() :
- data['REQUIRED_ITEM'] = f'ITEM.{text_level.split()[1].upper()}_{text_level.split()[2].upper()}'
- data['REQUIREDLEVELEVOLVE'] = 1
- else:
- data['REQUIREDLEVELEVOLVE']=0
- #separando os dados brutos num arquivo de texto
- for i in range(len(full_text)):
- if i ==1 or i==3:
- with open(f'bruto{i}.txt','w')as bruto:
- bruto.writelines(full_text[i])
- with open('bruto3.txt','r')as bruto:
- b= bruto.readlines()
- #Filtrando os dados necessários e passando para o dicionario
- for i in range(len(b)):
- if "HP" in b[i] :
- data['HP']=int(b[i+1])
- elif "Attack" in b[i] :
- data['ATK']=int(b[i+1])
- elif "Defense" in b[i] :
- data['DEF']=int(b[i+1])
- elif "Sp. Atk" in b[i] :
- data['SP.ATK']=int(b[i+1])
- elif "Sp. Def" in b[i] :
- data['SP.DEF']=int(b[i+1])
- elif "Speed" in b[i] :
- data['SPEED']=int(b[i+1])
- with open('bruto1.txt','r')as bruto:
- b= bruto.readlines()
- for i in range(len(b)):
- if 'Base Exp.'in b[i]:
- data['EXPERIENCE'] = int(b[i+1])
- elif 'Catch rate' in b[i] :
- data['CHANCE'] = int(b[i+2][:3])
- #retornando o dicionario
- return data
- pokemons = [
- 'pikachu',
- 'charmander',
- 'bulbasaur',
- 'ivysaur',
- 'blastoise',
- 'metapod',
- 'ekans',
- 'vulpix'
- ]
- #vamos passar um laço 'for' para printar os dados de cada um:
- for i in pokemons:
- print(f'{dados_pokemon(i)}\n\n\n')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement