Skupljanje podataka
REPUBLIKA SRBIJA
VISOKA TEHNIČKA ŠKOLA
STRUKOVNIH STUDIJA
POŽAREVAC
SEMINARSKI RAD
Organizacija rada
Automatsko prikupljanje podataka sa sajta
Student
: Stefan Mišić
Br. Indeksa: 456489/16
Profesor
: dr. Zoran Pešić
Studijski program
: Elektrotehnika
Predmet
: Organizacija rada
POŽAREVAC, 2016
2
Sadržaj:

4
2 Funkcija skripta
U ovom radu će biti opisan jedan od mojih web skrejpera: Skript koji automatizuje prikupljanje podataka
koji se koriste prilikom ocenjivanja bejzbol fantazi sastava.
Šta je bejzbol fantazi?
Grupa 'sportova' koji se uglavnom igraju na internetu. Naime korisnici sastavljaju imaginarne timove sa
stvarnim igračima. Uspeh svakog igrača se prebacuje u takozvane fantazi poene (ako je reč o košarci:
svaka asistencija, šut za 2/3 poena, odbrana i drugo se množe sa određenim koeficijentom) i sumiranjem
uspeha svih igrača u sastavu dobija konačna cifra. Ko ima veću cifru pobeđuje. Igrači se biraju na osnovu
projektovanih fantazi poena koji se mogu videti na sajtu do početka meča.
Ovaj skript skuplja podatke sa sajta koji već sam izračunava fantazi poene na osnovu već postojećeg
sastava bejzbol fantazi tima, poredi sumu stvarnih sa projektovanim rezultatima, računa procenat
uspešnosti i upisuje u bazu podataka za dalju analizu.
Sastavi timova se prikupljaju sa tri sajta: dailyfantasypros.com, rotowire.com, rotogrinders.com.
Kada se ocene sastavi sa svakog sajta, računa se prosečna ocena za svaki sajt posebno.
Određivanje procenata uspešnosti sastava timova se vrši po formuli: (zbir stvarnog učinka/zbir
projektovanog učinka)*100
5
3 Sam kod skripta
001: #Ime baze podataka sa podacima kao globalna promenljiva
002: completeName='lineups_database.db'
003:
004: #Funkcija skuplja kompletnu listu igraca sa sajta rotoguru1.com koji su
igrali prethodne veceri
005: def get_guru_player_list():
006:
roto_guru_list=[]
007:
#Konekcija ka sajtu
008:
doc = parse('http://rotoguru1.com/cgi-bin/byday.pl?game=fd').getroot()
009:
for row in doc.cssselect('table > tr'):
010:
for cell in row.cssselect('td:nth-child(3)'):
011:
for closer in cell.cssselect('table'):
012:
for i in range(3,400):
013:
tmp=[]
014:
for item in closer.cssselect('tr:nth-child('+str(i)
+')'):
015:
#Pozicija na kojoj igrac igra
016:
for player_position in
item.cssselect('td:nth-child(1)'):
017:
tmp.append(player_position.text_content().encode('utf-8').strip())
018:
#Ime igraca
019:
for closer_name in
item.cssselect('td:nth-child(2)'):
020:
for even_closer_name in
closer_name.cssselect('a'):
021:
tmp.append(even_closer_name.text_content().encode('utf-8').strip())
022:
#Poeni igraca
023:
for closer_points in
item.cssselect('td:nth-child(3)'):
024:
tmp.append(closer_points.text_content().encode('utf-8').strip())
025:
roto_guru_list.append(tmp)
026:
027: #Ocistiti listu od svih praznih redova(koji ne sadrze sve potrebne podatke)
ako takvi postoje
028:
for i in range(len(roto_guru_list)):
029:
try:
030:
if len(roto_guru_list[i])!=3:
031:
del roto_guru_list[i]
032:
except IndexError:
033:
continue
034:
return roto_guru_list
035:
036: #Prikupiti prethodni sastav iz tabele
037: def get_previous_lineup(table,print_res):
038: #Citanje iz tabele:
039:
#Uspostaviti konekciju sa tabelom
040:
conn = sqlite3.connect(completeName)
041:
with conn:
042:
c = conn.cursor()
043:
#Naredbe koje se ticu citanja iz tabele
044:
player_list=c.execute("SELECT * FROM "+table).fetchall()
045:
if print_res==True:
046:
print ' "Najsvežiji" sastav iz tabele : ',table
047:
for i in player_list:
048:
for n in i:
049:
try: print n.strip(),
050:
except: print n,
051:
print ' ',
Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.
Slični dokumenti