Files
mee6-scraper/pre-api/_parser.py
Xevion e31f1ae5dc init
2019-07-25 12:20:24 -05:00

60 lines
2.2 KiB
Python

from selenium import webdriver
from bs4 import BeautifulSoup
import time, pprint
class Leaderboard():
def __init__(self, pages=1):
self.update(pages)
self.pp = pprint.PrettyPrinter()
def parseEnding(self, n):
if n.endswith("k"):
n = float(n[:-1])
n*=1000
elif n.endswith("m"):
n = float(n[:-1])
n*=1000000
if int(n) == n:
n = int(n)
return n
def get(self):
return self.users
# Get the user listing off the ranks page and update the leaderboard data
def update(self, pages=1):
self.pages = pages
self._get()
def _get(self):
url = "https://mee6.xyz/leaderboard/166630061217153024"
browser = webdriver.Chrome()
browser.get(url)
for page in range(self.pages):
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
html = browser.page_source
browser.quit()
soup = BeautifulSoup(html, 'lxml')
# Processing Web Page
table_body = soup.find_all('div', attrs={'class':'leaderboardPlayer'})
users = {}
for entry in table_body:
# User Info section
userInfo = entry.find('div', attrs={'class':'leaderboardPlayerLeft'})
rank = userInfo.find('div', attrs={'class':'leaderboardRank'}).string
icon = userInfo.find('div', attrs={'class':'leaderboardPlayerIcon'}).find('img')['src']
username = userInfo.find('div', attrs={'class':'leaderboardPlayerUsername'}).string
# Stats section
userStats = entry.find('div', attrs={'class':'leaderboardPlayerStats'}).find_all('div')
messages = userStats[2].string
experience = userStats[5].string
percent = userStats[6]['class'][1][1:]
level = userStats[9].string
messages, experience = self.parseEnding(messages), self.parseEnding(experience)
users[username] = {'rank':rank, 'icon':icon, 'messages':messages, 'percent': percent, 'experience':experience, 'level':level}
self.users = users
def print(self):
self.pp.pprint(self.users)