|
|
|
from bs4 import BeautifulSoup
|
|
|
|
import requests
|
|
|
|
from ..objects.pokemon import Pokemon
|
|
|
|
from ..objects.raid import Raid
|
|
|
|
from ..core.location import Location
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
|
|
class Scraper():
|
|
|
|
def __init__(self):
|
|
|
|
self.HUNDO_URL = "https://moonani.com/PokeList/index.php"
|
|
|
|
self.PVP_URL = "https://moonani.com/PokeList/pvp.php"
|
|
|
|
|
|
|
|
def get_pokemons(self, url):
|
|
|
|
pokemon_lst = []
|
|
|
|
response = requests.get(url)
|
|
|
|
soup = BeautifulSoup(response.text, "lxml")
|
|
|
|
|
|
|
|
for row in soup.find_all("tr")[1:]:
|
|
|
|
data = row.find_all("td")[1:]
|
|
|
|
|
|
|
|
name = data[0].text.strip().strip("*")
|
|
|
|
number = int(data[1].text)
|
|
|
|
|
|
|
|
coordinates = map(float, data[2].text.split(","))
|
|
|
|
location = Location(*coordinates)
|
|
|
|
|
|
|
|
cp = int(data[3].text)
|
|
|
|
level = int(data[4].text)
|
|
|
|
attack = int(data[5].text)
|
|
|
|
defense = int(data[6].text)
|
|
|
|
hp = int(data[7].text)
|
|
|
|
iv = int(data[8].text.rstrip("%"))
|
|
|
|
shiny = data[9].text == "Yes"
|
|
|
|
start_time = datetime.fromisoformat(data[10].text)
|
|
|
|
end_time = datetime.fromisoformat(data[11].text)
|
|
|
|
country = data[12].text
|
|
|
|
|
|
|
|
pokemon = Pokemon(name=name, number=number, location=location, cp=cp, level=level, attack=attack,
|
|
|
|
defense=defense, hp=hp, iv=iv, shiny=shiny, start_time=start_time, end_time=end_time,
|
|
|
|
country=country)
|
|
|
|
pokemon_lst.append(pokemon)
|
|
|
|
|
|
|
|
return pokemon_lst
|
|
|
|
|
|
|
|
def get_hundos(self):
|
|
|
|
return self.get_pokemons(self.HUNDO_URL)
|
|
|
|
|
|
|
|
def get_pvp(self):
|
|
|
|
return self.get_pokemons(self.PVP_URL)
|
|
|
|
|
|
|
|
def get_raids(self):
|
|
|
|
raid_lst = []
|
|
|
|
response = requests.get("https://moonani.com/PokeList/raid.php")
|
|
|
|
soup = BeautifulSoup(response.text, "lxml")
|
|
|
|
|
|
|
|
for row in soup.find_all("tr")[1:]:
|
|
|
|
data = row.find_all("td")
|
|
|
|
|
|
|
|
name = data[0].text
|
|
|
|
number = int(data[1].text)
|
|
|
|
level = int(data[2].text)
|
|
|
|
|
|
|
|
coordinates = map(float, data[3].text.split(","))
|
|
|
|
location = Location(*coordinates)
|
|
|
|
|
|
|
|
start_time = datetime.fromisoformat(data[4].text)
|
|
|
|
end_time = datetime.fromisoformat(data[5].text)
|
|
|
|
country = data[6].text
|
|
|
|
|
|
|
|
raid = Raid(name, number, level, location, start_time, end_time, country)
|
|
|
|
raid_lst.append(raid)
|
|
|
|
|
|
|
|
return raid_lst
|
|
|
|
|
|
|
|
|
|
|
|
|