Before 2020/프로젝트

Project 1-Fin) 웹크롤링을 통한 공모전 점수화 프로그램

부루기 2020. 1. 9. 20:17
728x90

0123456
OpneCv를 통해 시간표를 읽고 엑셀로 공강시간을 표현

 

공모전의 날짜와 시간 그리고 내용을 크롤링후 엑셀로 정리
공강시간에 들을수 있는지를 확인하고 TRUE로 표현 그리고 시간이나 내용에따라 점수화
다른 학생의 시간표를 적용
다른 학생의 시간표 사용의 예시

>이렇게 완성시켰다. 처음만든 프로그램이라 여러모로 뿌듯하고 무언가를 만들어봤다는 게 굉장히 도움되었다. 왜 사람들이 언어를 배우면 무조건 하나의 프로그램을 만들어보라는 지 알았다.

>

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from time import sleep
import pandas as pd
import cv2
driver=webdriver.Chrome(r"C:\Users\dlagu\Desktop\chromdriver\chromedriver.exe")#r을 안붙이면 문법오류:유니코드가 나옴

driver.get("https://sportal.korea.ac.kr/default.aspx")

sleep(0.5)
driver.find_element_by_name('id').send_keys('아이디')
sleep(0.5)
driver.find_element_by_name('pw').send_keys('비밀번호')
driver.find_element_by_xpath('//*[@id="mainloginbtn"]').click()
driver.find_element_by_xpath('//*[@id="contents"]/div[1]/a/img').click()
html=driver.page_source
soup=BeautifulSoup(html,'html.parser')

title_list=soup.find_all('a','d-inlin-block text-truncate w-100')
mile_list=soup.find_all('div','mileage')
src_list=soup.find_all('div','col-7 departmentname mt-2')
date_list=soup.find_all('div','col-7 date')
dead_list=soup.find_all('div','deadLine')
i = 0
for content in title_list:
    title_list[i] = title_list[i].contents[0]
    i += 1
i = 0
for content in mile_list:
    mile_list[i] = mile_list[i].contents[0]
    i += 1
i = 0
for content in src_list:
    src_list[i] = src_list[i].contents[0]
    i += 1
i = 0
for content in date_list:
    date_list[i] = date_list[i].contents[0]
    i += 1
i = 0
for content in dead_list:
    dead_list[i] = dead_list[i].contents[0]
    i += 1
result_list=[-1]*30

Con_list=[
    ['title',title_list],
    ['date',date_list],
    ['deadline',dead_list],
    ['src',src_list],
    ['mileage',mile_list],
    ['result',result_list]
]
Con_df=pd.DataFrame.from_items(Con_list)
Con_df.to_csv('my_contest.csv',na_rep='-')

my_timetable=cv2.imread('friend1.jpg',cv2.IMREAD_COLOR)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[40,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_9_list = test_list[:]
print(time_9_list)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[130,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_10_list = test_list[:]
print(time_10_list)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[210,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_11_list = test_list[:]
print(time_11_list)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[300,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_12_list = test_list[:]
print(time_12_list)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[390,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_1_list = test_list[:]
print(time_1_list)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[480,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_2_list = test_list[:]
print(time_2_list)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[570,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_3_list = test_list[:]
print(time_3_list)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[660,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_4_list = test_list[:]
print(time_4_list)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[750,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_5_list = test_list[:]
print(time_5_list)

test_list=[None,None,None,None,None,None,None]
for i in range(0,5):
    px=my_timetable[840,140+i*120]
    if px[0]!=255 or px[1]!=255 or px[2]!=255:
        test_list[i]="using"
time_6_list = test_list[:]
print(time_6_list)

timetable = [ time_9_list, time_10_list, time_11_list, time_12_list, time_1_list, time_2_list, time_3_list, time_4_list, time_5_list, time_6_list]
Day = ['월','화','수','목','금','토','일']
Time=['09','10','11','12','13','14','15','16','17','18']

schedule = pd.DataFrame.from_records(timetable, columns=Day,index=Time)
schedule.to_csv('my_timetable.csv',na_rep='-')

num=0 
Con_df['Point']=0
Con_df['result']=1
for date in Con_df['date']:
    if len(Con_df['mileage'][num])==6:
        Con_df['Point'][num]+=int(Con_df['mileage'][num][0:2])
        Con_df['mileage'][num][0:2]
    elif len(Con_df['mileage'][num])==5:
        Con_df['Point'][num]+=int(Con_df['mileage'][num][0:1])
    
    if len(date)==34:
        week=date[18:19]
        time=date[21:23]
        
        Con_df['Point'][num]+=50
        if time=='09'or time=='10'or time=='11'or time=='12'or time=='13'or time=='14'or time=='15'or time=='16'or time=='17'or time=='18':
            if schedule[week][time]==None:
                Con_df['result'][num]=True
                Con_df['Point'][num]+=100
                num+=1
            else:
                Con_df['result'][num]=False
                num+=1
        else:
            Con_df['result'][num]=True
            Con_df['Point'][num]+=100
            num+=1
    elif len(date)==48:
        week=date[40:41]
        time=date[43:45]
        
        Con_df['Point'][num]+=25
        if time=='09'or time=='10'or time=='11'or time=='12'or time=='13'or time=='14'or time=='15'or time=='16'or time=='17'or time=='18':
            if schedule[week][time]==None:
                Con_df['result'][num]=True
                Con_df['Point'][num]+=100
                num+=1
            else:
                Con_df['result'][num]=False
                num+=1
        else:
            Con_df['result'][num]=True
            Con_df['Point'][num]+=100
            num+=1
    elif len(date)==36:
        week=date[18:19]
        
        Con_df['Point'][num]+=75
        if schedule[week]['16']==None:
            Con_df['result'][num]=True
            Con_df['Point'][num]+=100
            num+=1
        else:
            Con_df['result'][num]=False
            num+=1

Final=Con_df[Con_df.result==True]
Final.to_csv('final_des.csv')

>하지만 이 프로그램은 굉장히 엉성하고 좋은 코드라고는 볼 수 없다. 목표는 이 프로그램을 시점으로 해서 어플로 만들어서 학교에서 직접 사용할 수 있도록 하는 것이다. 

>이때 아쉬웠던 게 github를 사용해서 버젼별로 개발과정을 보여줄 수 있기를 원했는데 그때는 사용법을 몰라서 못했다. 따라서 다음 프로젝트는 git, github를 알고 직접 사용하면서 다다음 프로젝트에서는 이걸 통해 버젼벌로 개발 되어가는 걸 남기고 싶다.

 

728x90