Study Anything ๐Ÿง

๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ (์›น ํฌ๋กค๋ง) (2) - ๊ฒฝ๊ธฐ ๋ฐ์ดํ„ฐ ๋ณธ๋ฌธ

ํ”„๋กœ์ ํŠธ/[DA] ๋ฐ์ดํ„ฐ ๋ถ„์„ : ๋ฐฐ๊ตฌ

๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ (์›น ํฌ๋กค๋ง) (2) - ๊ฒฝ๊ธฐ ๋ฐ์ดํ„ฐ

์†” 2022. 3. 26. 23:45

์˜ˆ์ธก ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด๋ณด๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๊ธฐ์กด์— ๋ชจ์•˜๋˜ ๋ฐ์ดํ„ฐ๋กœ๋Š” ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฒฝ๊ธฐ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์ˆ˜์ง‘ํ–ˆ๋Š”๋ฐ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ทธ ๋‚ด์šฉ์„ ๋‹ด์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ž์„ธํ•œ ํฌ๋กค๋ง ๋ฐฉ๋ฒ•์€ ์ด์ „ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

(1) ์ˆ˜์ง‘ํ•  ๋ฐ์ดํ„ฐ ๋‹ด์€ ํƒœ๊ทธ ์ฐพ๊ธฐ

์ €๋ฒˆ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํฌ๋กค๋ง์„ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € url๊ณผ ํƒœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

ํฌ๋กค๋ง์„ ์ˆ˜ํ–‰ํ•  ํŽ˜์ด์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. KOVO ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์˜ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€์ด๋‹ค.

๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€

ํŽ˜์ด์ง€๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ฒฝ๊ธฐ ๋‚ ์งœ, ๊ฒฝ๊ธฐ ๋ฒˆํ˜ธ(์ˆœ๋ฒˆ), ๊ฒฝ๊ธฐ๋ฅผ ์น˜๋ฅธ ๋‘ ํŒ€, ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ, ๊ฒฝ๊ธฐ๊ฐ€ ์ง„ํ–‰๋œ ๋ผ์šด๋“œ(์ •๊ทœ๋ฆฌ๊ทธ๋Š” ์ด 6๋ผ์šด๋“œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

url์€ "https://www.kovo.co.kr/game/v-league/(์ƒ๋žต)season=018&team=&s_part=2&yymm=&r_round=1"์œผ๋กœ,

๋ผ์šด๋“œ ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ผ์šด๋“œ ์กฐ๊ฑด์„ ์„ค์ •ํ•œ ๊ฒƒ์ด url์— ๋ฐ˜์˜๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด์–ด์„œ ํƒœ๊ทธ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ฐฝ์„ ์—ด์—ˆ๋‹ค.

ํŽ˜์ด์ง€ ์ฝ”๋“œ

์ €๋ฒˆ ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ํ…Œ์ด๋ธ” ์•ˆ์— ์ €์žฅ๋˜์–ด ์žˆ๊ณ  ๊ทธ ์•„๋ž˜ tbody, tr, td ์ˆœ์œผ๋กœ ํ•˜์œ„๋กœ ๋ป—์–ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

 

 

(2) ์ฝ”๋“œ ์ž‘์„ฑ

์ด์ œ ์ฐพ์€ ํด๋ž˜์Šค์™€ ํƒœ๊ทธ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํฌ๋กค๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

์ €๋ฒˆ์ฒ˜๋Ÿผ ํฌ๋กค๋Ÿฌ๋ฅผ ๋Œ๋ฆด ๋•Œ๋งˆ๋‹ค input ๋ฉ”์†Œ๋“œ๋กœ ์ˆ˜์ง‘ํ•  ๋ผ์šด๋“œ๋ฅผ ์„ค์ •ํ•œ ํ›„ ํฌ๋กค๋งํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋ฐ˜๋ณต ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•œ ํ›„ ํฌ๋กค๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๊ทœ๋ฆฌ๊ทธ ์ „์ฒด๊ฐ€ 6๋ผ์šด๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ์—๋Š” ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ •ํ•ด์„œ ํฌ๋กค๋งํ–ˆ๋‹ค.

for i in range(1,7):
    search_url = "https://www.kovo.co.kr/game/v-league/11110_schedule_list.asp?season=018&team=&s_part=2&yymm=&r_round="+str(i)

    browser.get(search_url)
    browser.implicitly_wait(2)

    # ํฌ๋กค๋ง ํ•  ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”,ํƒœ๊ทธ ์ฐพ๊ธฐ - ๊ฒฝ๊ธฐ ์ •๋ณด (๋‚ ์งœ, ํ™ˆํŒ€, ์›์ •ํŒ€, ๊ฒฝ๊ธฐ๊ฒฐ๊ณผ, ๋ผ์šด๋“œ)
    table = browser.find_element_by_class_name('wrp_lst')    # div.wrp_lst
    tbody = table.find_element_by_tag_name("tbody")
    rows = tbody.find_elements_by_tag_name("tr")
    
...

์ด๋ฒˆ์—๋„ table ์„ ์ฐพ์„ ๋•Œ table ํƒœ๊ทธ ์œ„์˜ div ํƒœ๊ทธ์˜ ํด๋ž˜์Šค๋ช…์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ํ…Œ์ด๋ธ” ํด๋ž˜์Šค๋ช…์„ ์ง€์ •ํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฝ”๋“œ์— ์ ์šฉํ•˜์ง„ ์•Š์•˜์ง€๋งŒ tbody ๋‚˜ rows ์ฒ˜๋Ÿผ tag_name ์œผ๋กœ table ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•๋„ ๊ฐ€๋Šฅํ•œ๋ฐ, ์ •ํ™•ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ table์„ ์ฐพ์„ ๋•Œ๋Š” ํด๋ž˜์Šค๋ช…์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

 

์ด๋ฒˆ์—๋Š” tr ์•ˆ์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜๋Š” ๊ณผ์ •์ด ๊ธธ์–ด์กŒ๋Š”๋ฐ, ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

์œ„์˜ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉด ํ…Œ์ด๋ธ” ์•ˆ์— ์ค‘๊ฐ„ ์ค‘๊ฐ„ ๊ฒฝ๊ธฐ๊ฐ€ ์—†๋Š” ๋‚ ์ด ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ํฌ๋กค๋ง์„ ์ˆ˜ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ๊ฒฝ๊ธฐ๊ฐ€ ์—†๋Š” ๋‚ ์˜ ๋ฐ์ดํ„ฐ๋„ rows ์— ํฌํ•จ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹น ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ–ˆ๋‹ค.

 

tr ์•ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์ˆ˜์ง‘ํ•  ๋ฐ์ดํ„ฐ๋Š” ์ด 7๊ฐ€์ง€๋กœ [๋‚ ์งœ, ๊ฒฝ๊ธฐ๋ฒˆํ˜ธ, ํ™ˆํŒ€, ์›์ •ํŒ€, ์Šค์ฝ”์–ด, ์Šน๋ฆฌํŒ€, (๊ฒฝ๊ธฐํ•œ)์„ธํŠธ ์ˆ˜] ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์›๋ž˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•  ์ˆ˜๋Š” ์—†๊ณ  ์•ฝ๊ฐ„์˜ ๊ฐ€๊ณต์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

 

10์›” 16์ผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ•˜๋ฉด

date ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๊ณต ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด '10. 16 (ํ† )'์˜ ํ˜•ํƒœ์—์„œ '1016' ์˜ ํ˜•ํƒœ๋กœ ๋ฐ”๋€Œ๊ณ 

teamH ๋ฐ์ดํ„ฐ๋Š” 'GS์นผํ…์Šค  3 :' ์—์„œ 'GS์นผํ…์Šค' ํ˜•ํƒœ๋กœ, teamA ๋ฐ์ดํ„ฐ๋Š” '0  ํฅ๊ตญ์ƒ๋ช…' ์—์„œ 'ํฅ๊ตญ์ƒ๋ช…'์œผ๋กœ ๋ฐ”๋€๋‹ค.

score ๋ฐ์ดํ„ฐ๋Š” ์ดˆ๊ธฐ์˜ teamH, teamA ๋ฐ์ดํ„ฐ๋ฅผ ํ•ฉํ•œ ํ›„ ์ˆซ์ž์™€ ':' ๋ฌธ์ž๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ์ถ”์ถœํ•œ ํ›„ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๊ณ 

๊ฒฝ๊ธฐ๋ฅผ ์ด๊ธฐ๋Š” ์กฐ๊ฑด์ธ 3์„ธํŠธ๋ฅผ ๋”ฐ๋‚ธ ํŒ€์ด ํ™ˆํŒ€์ด๋ฉด(index 0) win ๋ฐ์ดํ„ฐ์— ํ™ˆํŒ€์„, ๊ทธ ์™ธ์—๋Š” ์›์ •ํŒ€์„ ์ €์žฅํ•œ๋‹ค.

score ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ':' ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์„ธํŠธ ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ๋Š” ์ˆซ์ž๋งŒ ์ถ”์ถœํ•ด์„œ ๋”ํ•œ๋‹ค.

(๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์€ ์ฝ”๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์•˜๋‹ค. *์ด์ „ ํฌ์ŠคํŠธ ์ฐธ๊ณ )

for value in rows:
    d = value.find_elements_by_tag_name("td")
    if len(d)>3:
        date = d[0].text
        ndate = re.findall('[0-9]',date)
        ndate = "".join(date)
        gamenum = d[1].text
        teamH = d[3].text
        teamA = d[4].text
        score = re.findall('[0-9:]',teamH+teamA)
        teamH = re.sub('[0-9: ]', '', teamH)
        teamA = re.sub('[0-9: ]', '', teamA)
        if score.index('3')==0:
            win = teamH
        else:
            win = teamA
        score = "".join(score)
        setnum = re.findall('[0-9]',teamH+teamA)
        setcnt = 0
        for s in setnum:
            setcnt += int(s)
          
...

 

 

 

 

(3) ๋ฐ์ดํ„ฐ ์ €์žฅ

ํฌ๋กค๋ง์ด ๋๋‚œ ํ›„์—๋Š” ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ csv ํŒŒ์ผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ ์ค‘ ๋‚ ์งœ, ํ™ˆํŒ€, ์›์ •ํŒ€, ์Šค์ฝ”์–ด, ๋ผ์šด๋“œ, ์Šน๋ฆฌํŒ€์„ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๋ชจ์Šต์ด๋‹ค.

๊ฒฝ๊ธฐ ๋ฐ์ดํ„ฐ

 

์œ„ ๋ฐ์ดํ„ฐ๋Š” ์ž์„ธํžˆ ๋ณด๋ฉด ๋‚ ์งœ๊ฐ€ ๊ฐ€๊ณตํ•œ ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ์›๋ž˜์˜ ํ˜•ํƒœ์ธ๋ฐ ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ€๊ณตํ•œ ๋‚ ์งœ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์ˆ˜์ง‘ํ•œ ๊ฒฝ๊ธฐ ๋ฒˆํ˜ธ, ์ด ์„ธํŠธ ์ˆ˜ ๋ฐ์ดํ„ฐ๋Š” ์™œ ์ˆ˜์ง‘ํ•œ ๊ฑธ๊นŒ?

์„ธ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ธ๋ฐ ์œ„ ๋ฐ์ดํ„ฐ๋Š” ๊ฒฝ๊ธฐ์˜ ๋Œ€๋žต์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“  ๊ฒƒ์ด๊ณ , ๋‹ค๋ฅธ ์›น ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ๊ฒฝ๊ธฐ ์„ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ๋ชจ์„ ์˜ˆ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์— ํ•„์š”ํ•œ ์ƒˆ ๋‚ ์งœ, ๊ฒฝ๊ธฐ ๋ฒˆํ˜ธ, ์„ธํŠธ ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ๋ชจ์€ ๊ฒƒ์ด๋‹ค.

 

 

 

์–ด์ฉŒ๋‹ค๋ณด๋‹ˆ ํฌ๋กค๋ง ๊ด€๋ จํ•ด์„œ ๊ฒŒ์‹œ๊ธ€์„ ์„ธ ๊ฐœ๋‚˜ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ,

๊ทธ๋งŒํผ ๊ด€๋ จ ๋‚ด์šฉ๋„ ๋งŽ์ด ์ฐพ์•„๋ณด๊ณ  ์ˆ˜ํ–‰ํ•ด๋ณด๋ฉด์„œ ๋งŽ์€ ๊ฒƒ์„ ๊นจ๋‹ฌ์•„๊ฐ€๊ณ  ์žˆ์–ด์„œ ๋ฟŒ๋“ฏํ•˜๊ธด ํ•˜๋‹ค.

๊ทธ๋Ÿผ ์ด์–ด์ง€๋Š” ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ฒฝ๊ธฐ ์„ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

728x90
Comments