삼성전자 주식의 과거 거래일 및 거래 데이터 수집 (1~10페이지)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import undetected_chromedriver as uc
driver = uc.Chrome()
driver.get("https://finance.naver.com/item/sise_day.naver?code=005930")
from bs4 import BeautifulSoup
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# driver.find_element(By.CSS_SELECTOR, 'table.type2')
html = BeautifulSoup(driver.page_source)
table = html.find('table', class_ = 'type2')
pd.read_html(str(table))[0].dropna()
페이지 끝까지 가져오기
from bs4 import BeautifulSoup
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
import undetected_chromedriver as uc
driver = uc.Chrome()
box = []
# 셀레니움 사용해서 1~710페이지까지만 하나의 데이터 프레임
for n in range(1, 710):
driver.get(f"https://finance.naver.com/item/sise_day.naver?code=005930&page={n}")
# HTML 소스 코드가 모두 뜰 때까지 최대 10초 기다려라! 다 뜰때까지
driver.implicitly_wait(10)
html = BeautifulSoup(driver.page_source) # 현재 창에 있는 소스를 들고 옴
table = html.find("table", class_ = "type2")
table = pd.read_html(str(table))[0].dropna()
box.append(table)
#time.sleep(2)
driver.implicitly_wait(10) 함수
-> html 소스코드가 다 뜰 때까지 최대 10초 기다리는 함수 (시간 없을 때 쓰기)
로그인
driver = uc.Chrome()
driver.get('https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/')
driver.find_element(By.CSS_SELECTOR, 'input.input_id').send_keys('my id')
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, 'input.input_pw').send_keys('my pw')
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, 'button.btn_login').click()
import pyautogui
# 현재 마우스 위치 출력
login_id = pyautogui.position()
login_id
import pyperclip
pyautogui.click(login_id)
time.sleep(1)
pyautogui.click(login_id)
time.sleep(1)
pyperclip.copy('dfdsdf')
pyautogui.hotkey('ctrl', 'v')
pyautogui.click(login_pw)
time.sleep(1)
pyautogui.click(login_pw)
time.sleep(1)
pyperclip.copy('dfdsdf')
pyautogui.hotkey('ctrl', 'v')
1. 중복된 상품 없이 100개 이상의 상품 정보 수집하기(제목, 가격, 평점)
2. 수집된 정보는 데이터프레임으로 만들기
# Chrome 드라이버 실행
driver = uc.Chrome()
driver.get('https://shopping.naver.com/fresh/directfarm/home')
total = set()
# 1. 중복된 상품 없이 100개 이상의 상품 정보 수집하기(제목, 가격, 평점)
# 2. 수집한 정보는 데이터프레임으로 만들기
while True:
body = driver.find_element(By.CSS_SELECTOR, "body")
body.send_keys(Keys.PAGE_DOWN)
time.sleep(2)
for i in driver.find_elements(By.CSS_SELECTOR, "li._1OKV3UfxuI"):
title = (i.find_element(By.CSS_SELECTOR, "strong._1lxNNH5gfD").text)
price = (i.find_element(By.CSS_SELECTOR, 'span._3MzrqSUlwR').text)
star = (i.find_element(By.CSS_SELECTOR, "span._29gNnX1yLx").text.split("\n")[1])
a = (title, price, star)
total.add(a)
print(f"{len(total)}개 아이템 수집완료")
if len(total) >= 100:
break
블로그 제목 가져오기
iframe : 부모 문서와는 별개의 문서로, 독립적으로 콘텐츠를 로드할 수 있는 HTML 요소
driver.switch_to.frame('mainFrame')
driver.find_element(By.CSS_SELECTOR, 'div.pcol1').text
네이버 국내증시 - 시가총액 다 체크해서 가져오기
Network - Payload에서
이런식으로 볼 수 있음.
태그이름이 input, class name이 fieldIds
total = []
for n in tqdm(range(1, 47)):
dic = {"menu" : 'market_sum',
"returnUrl" : f"http://finance.naver.com/sise/sise_market_sum.naver?sosok=0&page={n}",
"fieldIds" : fields}
url = requests.post("https://finance.naver.com/sise/field_submit.naver", data = dic)
html = BeautifulSoup(url.text)
table = html.find("table", class_ = 'type_2')
table = pd.read_html(str(table))[0]
total.append(table)
time.sleep(2)
table = pd.concat(total)
table.dropna(subset="종목명").columns
table = pd.concat(total)
stock = table.dropna(subset="종목명").columns
stock.to_excel('stock.xlsx', index=False)