Study Anything ๐ง
ํ๋ก์ ํธ ์ค๋ช & ๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง), ์ ์ฅ - ์ ์ ๋ฐ์ดํฐ ๋ณธ๋ฌธ
ํ๋ก์ ํธ ์ค๋ช & ๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง), ์ ์ฅ - ์ ์ ๋ฐ์ดํฐ
์ 2022. 3. 11. 23:48์๋กญ๊ฒ ์์ํ๋ ํ๋ก์ ํธ๋ ์คํฌ์ธ ๋ฐ์ดํฐ ๋ถ์ ํ๋ก์ ํธ๋ก, ์คํฌ์ธ ์ค ์ฌ์๋ฐฐ๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํด๋ณด๋ ค๊ณ ํ๋ค.
ํ๋ก์ ํธ์ ํฐ ๋ชฉํ๋ ์ ์๋ค์ ๊ฒฝ๊ธฐ ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ฅ๋ ฅ์น๋ฅผ ๊ตฌํ๊ณ , ์ด๋ค ๋ ํ์ด ๊ฒฝ๊ธฐ๋ฅผ ์น๋ฅธ๋ค๊ณ ๊ฐ์ ํ ๋ ํฌ์ง์ ๋ณ๋ก ์ ์๋ฅผ ์ง์ ํ๋ฉด ์ด๋ ํ์ด ์น๋ฆฌํ ์ง ์์ธกํ๋ ๊ฒ์ด๋ค.
ํ๋ก์ ํธ์ ์งํ ๊ณผ์ ์ ๋ด์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ๊ตฌ์ ์์ธํ ๋ฃฐ ์ค๋ช ์ ์๋ตํ๋๋ก ํ๊ฒ ๋ค.
์ ์์ ๊ฒฝ๊ธฐ ๊ธฐ๋ก ๋ฐ์ดํฐ์๋ ํฌ๊ฒ ๊ณต๊ฒฉ, ์๋ธ, ์ธํธ, ๋ธ๋กํน, ๋ฆฌ์๋ธ, ๋๊ทธ ๋ด์ฉ์ด ํฌํจ๋์ด ์๋ค.
๊ฐ ํฌ์ง์ ๋ณ๋ก ์ค์ํ๊ฒ ์ฌ๊ฒจ์ง๋ ํญ๋ชฉ์ด ์กฐ๊ธ์ฉ์ ๋ค๋ฅด์ง๋ง ์ ํญ๋ชฉ๋ค์ ํ ๋๋ก ์ ์์ ์ญ๋์ ์ธก์ ํ๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ธฐ ์ํด์ ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ๋ถ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ จํ๋ ์ผ์ด๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ง๋ จํ๋ ค๋ฉด ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์๊ฒ ์ง๋ง ์ด๋ฏธ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ชจ์์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ๋ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ํฌ๋กค๋ง์ด๋ค.
์ ๊ทธ๋ผ ํฌ๋กค๋ง์ ํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์์ฑํด๋ณด์.
(1) ๋ผ์ด๋ธ๋ฌ๋ฆฌ import
from selenium import webdriver # ํฌ๋กค๋ง์ ์ฌ์ฉ
import pandas as pd # ๋ฐ์ดํฐํ๋ ์, csv ์์ฑ์ ์ฌ์ฉ
import time
(2) ํฌ๋กค๋ง
๋ด๊ฐ ํฌ๋กค๋ง ํ ์นํ์ด์ง๋ ๋ค์๊ณผ ๊ฐ์ด ์๊ฒผ๋ค.
ํฌ์ง์ ๊ณผ ํฌ์ง์ ๋ณ ํ์ด์ง ์๋ฅผ ์ ๋ ฅ๋ฐ์์ ์๋์ผ๋ก ํฌ๋กค๋งํ๋๋ก ํ ๊ฒ์ด๋ค.
ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์์ ํฌ๋กค๋งํ๊ธฐ ์ํด์๋ chromedriver ๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ผ์ ๋ค์ด๋ฐ์ ํ ํด๋น ํ์ผ์ ๋๋ผ์ด๋ฒ๋ก ์ฌ์ฉํ๋ค.
๋ค์์ผ๋ก url ์ ์๋์ผ๋ก ๋ณ๊ฒฝํ๋ฉฐ ํฌ๋กค๋งํ ๋ ํ์ํ ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ก ํ๋ค.
browser = webdriver.Chrome('C:/Users/ADMIN/Desktop/chromedriver.exe') # chromedriver ๋ค์ด ํ์
position = input("ํฌ์ง์
: ")
page = int(input("ํ์ด์ง ์: "))
๋ค์์ผ๋ก url ์ ์ ๋ ฅํ๊ณ ๋๋ผ์ด๋ฒ๊ฐ url ์ ์ฌ์ฉํ๋๋ก get ํ๊ณ , ์ ๊น์ ์๊ฐ ํ ์ ๋๋ค.
search_url = "url ์
๋ ฅ"
browser.get(search_url)
browser.implicitly_wait(2)
์ ์ด์ ์นํ์ด์ง์ html ๊ตฌ์กฐ๋ฅผ ๋ณด์.
์ฐ๋ฆฌ๊ฐ ์ถ์ถํด์ผ ํ ๋ฐ์ดํฐ๋ค์ด table ํ๊ทธ ์์ ์๋ ๊ฒ์ ์ ์ ์๋ค.
์ด ์ ๋ณด๋ค์ ํ ๋๋ก ํฌ๋กค๋ง ์ฝ๋๋ฅผ ์ง๋ณด๋๋ก ํ๊ฒ ๋ค.
table ์์ ๋ด์ฉ์ ํฌ๋กค๋ง ํ๋ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
ํ ์ด๋ธ์ ์ฐพ์ ๋ class_name ์ผ๋ก ์ฐพ์๋๋ฐ, ์์ html ๊ตฌ์กฐ์ ์๋ ์ฝ๋๋ฅผ ๋ดค์ ๋ "table-div" ๋ ํ ์ด๋ธ ํ๊ทธ์ ํด๋์ค๋ช ์ด ์๋์ง๋ง ์ด ํด๋์ค๋ช ์ ์ฌ์ฉํด์ผ ์ ์์ ์ผ๋ก ํฌ๋กค๋ง์ด ์ด๋ค์ก๋ค.
์ด์ฒ๋ผ ํฌ๋กค๋ง์ด ์ํ๋๋๋ก ๋์ง ์์ ๋๋ ์์์ ํ์๋ฅผ ์ค๊ฐ๋ฉฐ ์ ์ ํ ํ๊ทธ๋ฅผ ์ฐพ์๋ด์ผ ํ๋ค.
์๋ฌดํผ ์ฒ์์ ํ ์ด๋ธ์ ์ฐพ์ ๋๋ class_name ์ผ๋ก ์ฐพ๊ณ ,
๊ทธ ๋ค์๋ถํฐ๋ tag_name ์ผ๋ก tbody ์ tr, td ์์ญ์ ์ฐพ๋๋ค.
find_element ์ find_elements ์ ์ฐจ์ด๋ ํ ๊ฐ๋ฅผ ์ป๋์ง ์ฌ๋ฌ ๊ฐ๋ฅผ ์ป๋์ง์ ๋ํ ์ฐจ์ด์ด๋ค.
find_elements ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ์ฌ๋ผ์ด์ฑ์ ํตํด ์ํ๋ ์์ญ๋งํผ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค.
๋๋ ์ข ๋ ์ธ๋ถํํ๋๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ณ์์ ์ ์ฅํ๊ณ , ๋ฏธ๋ฆฌ ์ ์ธํด ๋ ๋ฆฌ์คํธ์ ๋ณ์๋ฅผ ์ถ๊ฐํ์ง๋ง
๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๋ฆฌ์คํธ์ ์ถ๊ฐํด๋ ๋ฌธ์ ๋ ์๋ค. (๋ฐ๋ก ์ถ๊ฐํ๋ ๊ฒ์ด ํจ์จ์ ๋ ์ข์ ๊ฒ..)
table = browser.find_element_by_class_name("table-div") # ๋๊ฐ์ด ํ
์ด๋ธ์ด์ด๋ ํ์ํ ํด๋์ค๋ช
์ด ๋ค๋ฅผ ์ ์์
tbody = ptable.find_element_by_tag_name("tbody")
trows = ptbody.find_elements_by_tag_name("tr")
for index, value in enumerate(trows):
data = value.find_elements_by_tag_name("td")[1:]
name = data[0].text
team = data[1].text
...
namelist.append(name)
teamlist.append(team)
...
๋ฐ์ดํฐ ์ถ์ถ์ด ๋๋ฌ๋ค๋ฉด ๋๋ผ์ด๋ฒ๋ก ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์์ค๋ค.
browser.close()
(3) ๋ฐ์ดํฐํ๋ ์ ์์ฑ, csv ํ์ผ๋ก ์ ์ฅ
๋ฆฌ์คํธ์ ๊ฐ ๋ด์ฉ์ด ๋ชจ๋ ๋ด๊ฒผ๋ค๋ฉด ๋ฐ์ดํฐํ๋ ์์์ ์ฌ์ฉํ column ๊ณผ ๊ฐ์ ๋์ ๋๋ฆฌ์ { ํค:๊ฐ } ํํ๋ก ์ ์ฅํ๋ค.
๊ทธ ๋ค์ ๋์ ๋๋ฆฌ๋ฅผ ๋ฐ์ดํฐํ๋ ์ ํ์์ผ๋ก ๋ณํํ๊ณ ํ์ธํด๋ณธ๋ค.
# DataFrame - Libero
data = {"name":namelist,"team":teamlist,"pos":"Li","score":scorelist,"error":errlist,...}
libero = pd.DataFrame(data)
libero.index += 1
libero.head(5)
๋ฐ์ดํฐํ๋ ์์ด ์ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค!
๋ฐ์ดํฐํ๋ ์์ ์์ฑํ ๋ ๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ง์ ํด์ฃผ๋๋ฐ ์ธ๋ฑ์ค๊ฐ 1๋ถํฐ ์์ํ๋๋ก ์ฝ๋์ ์ถ๊ฐํด์ฃผ์๋ค.
๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ ํํธ, ๋ผ์ดํธ, ์ผํฐ, ์ธํฐ ํฌ์ง์ ์ ๋ฐ์ดํฐ๋ ์ถ๊ฐ๋ก ์ป๋๋ค.
์ด์ ๊ฐ ํฌ์ง์ ๋ณ csv ํ์ผ๊ณผ ๋ชจ๋ ํฉ์น ํ์ผ์ ๋ง๋ค์ด๋ณด์.
DataFrame.to_csv() ๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐํ๋ ์์ csv ํ์ผ๋ก ๋ณํํ๋ค.
๋ฉ์๋ ์์ฑ์ ํ์ผ ๊ฒฝ๋ก์ ํ์ผ ์ด๋ฆ, ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ ์ง์ ํ๋๋ฐ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ utf-8-sig ๋ฅผ ์ฌ์ฉํด์ผ ํ๊ธ์ด ๊นจ์ง์ง ์๋๋ค.
libero.to_csv('C:\\...\\libero.csv',encoding='utf-8-sig')
left.to_csv('C:\\...\\left.csv',encoding='utf-8-sig')
right.to_csv('C:\\...\\right.csv',encoding='utf-8-sig')
center.to_csv('C:\\...\\center.csv',encoding='utf-8-sig')
setter.to_csv('C:\\...\\setter.csv',encoding='utf-8-sig')
์ค๊ฐ์ ๋ฆฌ๋ฒ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ป์ ํ ๋ค๋ฅธ ํฌ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ป์ ๋ ํฌ์ง์ ์ ๋ชจ๋ Li ๋ก ์ค์ ํ๋ ์ค์๊ฐ ์์๋ค.
ํ์ง๋ง ๋ฐ์ดํฐํ๋ ์ ํน์ฑ์ผ๋ก ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ๋ค.
ํ ์นผ๋ผ์ ๋ชจ๋ ๊ฐ์ ๋ฐ๊ฟ ๋๋ ์๋์ ๊ฐ์ด DataFrame[column] = value ํ์์ ์ฌ์ฉํ ์ ์๋ค.
left["pos"] = "L"
์๋ฌดํผ ์ด์ ๊ฐ ํฌ์ง์ ๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์์ผ๋ ์ด ํฌ์ง์ ๋ค์ ๋ชจ๋ ํฉ์ณ์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ณด๋ ค๊ณ ํ๋ค.
data ๋ผ๋ ๋ฆฌ์คํธ ์์ ๋ฐ์ดํฐํ๋ ์๋ค์ ์ ์ฅํ๊ณ ํ๋ค์ค์ concat() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ํ ๋ฐฉํฅ์ผ๋ก ํฉ์ณค๋ค.
๋ฐ์ดํฐํ๋ ์ ๋ณ๋ก ์ธ๋ฑ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ignore_index ์์ฑ์ True ๋ก ์ค์ ํด์ฃผ์ด์ ๊ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฌด์ํ๋๋ก ํ๋ค.
์ด ๋ ๊ฐ ๋ฐ์ดํฐํ๋ ์์ ์ปฌ๋ผ์ด ๋ค๋ฅด๋ฉด ์ปฌ๋ผ ๋ถ๋ถ์ ๋ค๋ฅธ ์ปฌ๋ผ์ด ์ถ๊ฐ๋๊ณ ๊ฐ์ด ์๋ ์ปฌ๋ผ์ ๋น ๊ฐ์ผ๋ก ์ฑ์์ง๋ค.
data = [libero,left,right,center,setter]
player = pd.concat(data,ignore_index=True)
player.index += 1
player.to_csv('C:\\...\\player.csv',encoding='utf-8-sig')
์ ์ ๋ฐ์ดํฐ์ธ player.csv ํ์ผ์ ๋ณด๋ฉด ๋ค์์ฒ๋ผ ์ ํฉ์ณ์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ฒ์๋ ์ด๋ ๊ฒ ํ๋ก์ ํธ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ๋ค๋ค๋ณด์๋ค.
๋ค์ ํฌ์คํธ์์๋ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ๋ฅผ ๋ค๋ค ๋ณผ ์์ ์ด๋ค.
'ํ๋ก์ ํธ > [DA] ๋ฐ์ดํฐ ๋ถ์ : ๋ฐฐ๊ตฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง) (3) - ๊ฒฝ๊ธฐ ์ธ๋ถ ๋ฐ์ดํฐ (0) | 2022.03.27 |
---|---|
๋ฐ์ดํฐ ์์ง (์น ํฌ๋กค๋ง) (2) - ๊ฒฝ๊ธฐ ๋ฐ์ดํฐ (0) | 2022.03.26 |
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ - ๊ฒฐ์ธก๊ฐ ์ฒ๋ฆฌ (0) | 2022.03.13 |
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ - PySpark์์ SQL ์ฌ์ฉํ๊ธฐ (0) | 2022.03.12 |