Study Anything ๐ง
๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง) (2) - ๊ฒฝ๊ธฐ ๋ฐ์ดํฐ ๋ณธ๋ฌธ
๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง) (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 ํ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์์งํ ๋ฐ์ดํฐ ์ค ๋ ์ง, ํํ, ์์ ํ, ์ค์ฝ์ด, ๋ผ์ด๋, ์น๋ฆฌํ์ ํ๋์ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํํ ๋ชจ์ต์ด๋ค.
์ ๋ฐ์ดํฐ๋ ์์ธํ ๋ณด๋ฉด ๋ ์ง๊ฐ ๊ฐ๊ณตํ ํํ๊ฐ ์๋ ์๋์ ํํ์ธ๋ฐ ๊ทธ๋ ๋ค๋ฉด ๊ฐ๊ณตํ ๋ ์ง ๋ฐ์ดํฐ์ ํจ๊ป ์์งํ ๊ฒฝ๊ธฐ ๋ฒํธ, ์ด ์ธํธ ์ ๋ฐ์ดํฐ๋ ์ ์์งํ ๊ฑธ๊น?
์ธ ๋ฐ์ดํฐ๋ ๋ค์ ํฌ์คํธ์์ ์ฌ์ฉํ ์์ ์ธ๋ฐ ์ ๋ฐ์ดํฐ๋ ๊ฒฝ๊ธฐ์ ๋๋ต์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ๊ฒ์ด๊ณ , ๋ค๋ฅธ ์น ํ์ด์ง๋ฅผ ํตํด ๊ฒฝ๊ธฐ ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ๋ก ๋ชจ์ ์์ ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ ํ์ํ ์ ๋ ์ง, ๊ฒฝ๊ธฐ ๋ฒํธ, ์ธํธ ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ชจ์ ๊ฒ์ด๋ค.
์ด์ฉ๋ค๋ณด๋ ํฌ๋กค๋ง ๊ด๋ จํด์ ๊ฒ์๊ธ์ ์ธ ๊ฐ๋ ์์ฑํ๊ฒ ๋์๋๋ฐ,
๊ทธ๋งํผ ๊ด๋ จ ๋ด์ฉ๋ ๋ง์ด ์ฐพ์๋ณด๊ณ ์ํํด๋ณด๋ฉด์ ๋ง์ ๊ฒ์ ๊นจ๋ฌ์๊ฐ๊ณ ์์ด์ ๋ฟ๋ฏํ๊ธด ํ๋ค.
๊ทธ๋ผ ์ด์ด์ง๋ ํฌ์คํธ์์๋ ๊ฒฝ๊ธฐ ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ ์์งํด๋ณด๋๋ก ํ๊ฒ ๋ค.
'ํ๋ก์ ํธ > [DA] ๋ฐ์ดํฐ ๋ถ์ : ๋ฐฐ๊ตฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง) (3) - ๊ฒฝ๊ธฐ ์ธ๋ถ ๋ฐ์ดํฐ (0) | 2022.03.27 |
---|---|
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ - ๊ฒฐ์ธก๊ฐ ์ฒ๋ฆฌ (0) | 2022.03.13 |
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ - PySpark์์ SQL ์ฌ์ฉํ๊ธฐ (0) | 2022.03.12 |
ํ๋ก์ ํธ ์ค๋ช & ๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง), ์ ์ฅ - ์ ์ ๋ฐ์ดํฐ (0) | 2022.03.11 |