2023. 6. 7. 09:58ใPython
https://code.visualstudio.com/
Visual Studio Code - Code Editing. Redefined
Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.
code.visualstudio.com
์ ์ฌ์ดํธ ๋ค์ด๊ฐ์ ์ค์น
<ํ๊ธ ์ ์ฉ>
Ctrl + Shift + P
language > Configure Display language > ํ๊ตญ์ด
ํ์ด์ฌ ์ค์น
๊ฐ์ ํ๊ฒฝ ์ธํ
ํฐ๋ฏธ๋ > ์ ํฐ๋ฏธ๋ : ํฐ๋ฏธ๋ ์ฐฝ ์ผ๊ธฐ
๊ฐ์ ํ๊ฒฝ ์ค์ ํ๊ธฐ
๋ช ๋ น์ด : python -m venv myenv(๊ฐ์ํ๊ฒฝ์ด๋ฆ)
์ ๋ช ๋ น์ด ์น๋ฉด ๊ฐ์ํ๊ฒฝ ํด๋ ์์ฑ๋จ.
์ ํด๋ ๊ฒฝ๋ก๋ก ์ฐพ์๊ฐ์ activate ์คํ ์์ผ์ฃผ๊ธฐ
ํด๋ ์ฐพ์๊ฐ๋ ๋ช ๋ น์ด cd
์๋ ๋ช ๋ น์ด ์ฐจ๋ก๋๋ก ์ ๋ ฅ.
cd myenv
cd Scripts
activate (ํ์ผ ์คํ์์๋ cd ์ ์)
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
pip list : ์ค์น๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ธ ๋ช ๋ น์ด
3๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
pip install pandas
pip install selenium
pip install lxml
chromedriver ์ค์น
์์คํฌํ์ด์ค ํด๋ ์์ chromedriver.exe ๋ฃ๊ธฐ
์ ํ์ผ market_cap.py ์์ฑ.
๋ช ๋ น์ฐฝ์ python ์ ๋ ฅ : python ์ ๋ ฅ ์ฐฝ์ผ๋ก ๋ณํ๋จ
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.maximize_window() #์ฐฝ ์ต๋ํ
# 1. ํ์ด์ง ์ด๋
url = 'https://finance.naver.com/sise/sise_market_sum.naver?&page='
browser.get(url)
#2. ์กฐํ ํญ๋ชฉ ์ด๊ธฐํ (์ฒดํฌ๋์ด ์๋ ๋ณด๊ธฐ ํญ๋ชฉ ์ฒดํฌ ํด์ )
checkboxes = browser.find_elements(By.NAME, 'fieldIds')
for checkbox in checkboxes:
if checkbox.is_selected(): #์ฒดํฌ๋ ์ํ
checkbox.click() #ํด๋ฆญ(์ฒดํฌ ํด์ )
์์ ์ด์ต, ์์ฐ์ด๊ณ, ๋งค์ถ์ก ์ฒดํฌ๋ฐ์ค ํ์ฌ ์กฐํ
(์ต)์ lable ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ vlaue ๊ฐ ๊ฐ์ ธ์ค๊ธฐ ์ ๋งคํจ > ์๋ต
#3. ์กฐํ ํญ๋ชฉ ์ค์ (์ํ๋ ํญ๋ชฉ ์ฒดํฌ ํ ์ ์ฉํ๊ธฐ)
items_to_selected = ['์์
์ด์ต', '์์ฐ์ด๊ณ', '๋งค์ถ์ก']
for checkbox in checkboxes:
parent = checkbox.find_element(By.XPATH, '..') # ..์ ์๋ฏธ > ์์๊ฐ์ฒด
label = parent.find_element(By.TAG_NAME, 'label')
# print(label.text) #์ด๋ฆ ํ์ธ
# ์ํ๋ ํญ๋ชฉ์ ์ฒดํฌ๋ฐ์ค ์ฒดํฌ
if label.text in items_to_selected : #์ ํ ํญ๋ชฉ๊ณผ ์ผ์นํ๋ฉด
checkbox.click() #์ฒดํฌ
#4. ์ ์ฉํ๊ธฐ ๋ฒํผ ํด๋ฆญ (์ ์ฉํ๊ธฐ ๋ฒํผ aํ๊ทธ์ jsํจ์๋ก ๋์ด ์์)
btn_apply = browser.find_element(By.XPATH, '//a[@href="javascript:fieldSubmit()"]')
btn_apply.click()
์ํ๋ ๋ฐ์ดํฐ ์ถ์ถ
ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ import
import pandas as pd
import os
#5. ๋ฐ์ดํฐ ์ถ์ถ
#page 1~41๊น์ง ์์ > ๋ฐ๋ณต
for idx in range(1, 42) :
#์ฌ์ ์์
(ํ์ด์ง ์ด๋)
browser.get(url + str(idx)) # fianace.naver.com/...~page=1,2,3... (url ์์ฒด String์ด๊ธฐ ๋๋ฌธ์ idx๋ฅผ ๋ฌธ์๋ก ๋ณ๊ฒฝ)
# ๋ฐ์ดํฐ ์ถ์ถ
df = pd.read_html(browser.page_source)[1]
df.dropna(axis='index', how='all', inplace=True)
df.dropna(axis='columns', how='all', inplace=True)
if len(df) == 0: # ๋ ์ด์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ
break
#6. ํ์ผ ์ ์ฅ (os import)
f_name = 'sise.csv'
if os.path.exists(f_name) : # ํ์ผ์ด ์๋ค๋ฉด
df.to_csv(f_name, encoding='utf-8-sig', index=False, mode='a', header=False) # ํ์ผ ์์ ์ ์ํด mode = append, header ์ถ๊ฐ x
else : # ํ์ผ์ด ์๋ค๋ฉด (ํค๋ ํฌํจ)
df.to_csv(f_name, encoding='utf-8-sig', index=False)
print(f'{idx} ํ์ด์ง ์๋ฃ')
# ๋ธ๋ผ์ฐ์ ์ข
๋ฃ
browser.quit()
์ฌ์ด๋์ ํ์ผ ์๊น!
'Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ด์ฌ ์๋ฐ๋ก ๊ฐ์ ธ์ค๋ ๋ฒ (0) | 2023.06.19 |
---|---|
๋์๋ณด๋ ์๊ฐํ - vscode๋ก html ์์ฑ (0) | 2023.06.12 |
์น ํฌ๋กค๋ง (4) ์คํ๋ฒ ์ค ๋งค์ฅ ์ ๋ณด ํฌ๋กค๋ง (0) | 2023.06.01 |
AI ๋จธ์ ๋ฌ๋ (0) | 2023.05.25 |
๋ฐ์ดํฐ ๋ถ์ (3) ๋ฐ์ดํฐ ํ์ธ ๊ธฐ์ด (0) | 2023.05.22 |