lo hice con hilos y guardando los en un arreglo de diccionarios
import requests import threading from bs4 import BeautifulSoup
Url generalPOKELIST_WEB = 'https://pokemondb.net/pokedex/'
lista de pokemonspokedex =[]
''' Param: nombre del pokemon(string) Obtiene de la página de descripción del pokemon la especie Retorna specie(string). ''' def getSpeciePokemon(name): response = requests.get(POKELIST_WEB+name) if response.status_code == 200: soup = BeautifulSoup(response.text,'html.parser') specie = soup.find('table',{'class':'vitals-table'}).tbody.find_all('tr')[2].td.get_text() return specie
''' Param :tr(nodo beautifulsoup) obtiene los datos del pokemon en el tr y en los td y los guarda en un diccionario que al final será agregado a la lista pokedex. ''' def getDataPokemon(tr): number = tr.find('td',{'class':'cell-num'}).find('span',{'class':'infocard-cell-data'}).get_text() name = tr.find('td',{'class':'cell-name'}).a.get_text() types = tr.find('td',{'class':'cell-icon'}).find_all('a') types = [type.text for type in types ] pokemon = {} pokemon['number'] = number pokemon['name'] = name pokemon['specie'] = getSpeciePokemon(name) pokemon['type']=types print(pokemon) pokedex.append(pokemon)
''' Obtiene de la tabla general todos los pokemons e inicia la iteración con los hilos. ''' def getList(): response = requests.get(POKELIST_WEB+'all') if response.status_code == 200: soup = BeautifulSoup(response.text,'html.parser') if soup is not None: table = soup.find('table') trs = table.tbody.find_all('tr') for tr in trs: thread= threading.Thread(name='getDataPokemon',target=getDataPokemon,args=(tr,)) thread.start()
print(pokedex)
if name == 'main': getList()