⚙️ Web Crawling
📌 Web Crawling 중 403 ERROR 해결
import urllib.request
url = "https://finance.daum.net/api/search/ranks?limit=10"
req = urllib.request.Request(
url,
data = None,
# 개발자도구 > 네트워크 > 해당 정보 확인 : 브라우저에서 요청한 것처럼 변환
headers = {"Referer": "https://finance.daum.net/",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
)
res = urllib.request.urlopen(req).read().decode("utf-8")
res
import requests
url = "https://finance.daum.net/api/search/ranks?limit=10"
headers = {"Referer": "https://finance.daum.net/",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
res = requests.get(url,headers=headers)
res.text
📌 Selenium
- 주의사항
- ChromeDriver 버전과 Chrome 버전이 동일한지 체크
- Selenium 4.x 버전 기준으로 코드가 작성되었는지 체크
- 기본 사용법
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 구조 중심으로 찾을 요소 지정
from selenium.webdriver.common.by import By
# 키보드 조작 관련
from selenium.webdriver.common.keys import Keys
path = "chromedriver 응용파일 경로"
s = Service(path)
driver = webdriver.Chrome(service = s)
# 창 크기 조절
driver.set_window_size(1200,1200)
# 원하는 검색 브라우저로 이동
url = "https://www.naver.com/"
driver.get(url)
# 검색어 입력
query_txt = "ASAC"
# 검색창 컴포넌트를 xPath를 복사하여 찾기
element = driver.find_element(By.XPATH, '//*[@id="query"]')
# 검색어를 검색창으로 이동
element.send_keys(query_txt)
# 검색버튼 찾기 및 누르기
driver.find_element(By.XPATH, '//*[@id="search-btn"]').click()
# 화면 캡쳐
driver.save_screenshot("test.png")
# 브라우저 종료
driver.quit()
⚙️ 실습
📝 Selenium 실습
💡 DART의 최근공시 데이터를 페이지별로 모두 가져오기
✅ 라이브러리 불러오기 및 브라우저 창 생성
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import re
import time
import datetime
path = "chromedriver 응용파일 경로"
s = Service(path)
driver = webdriver.Chrome(service = s)
✅ 데이터 수집하기
url = f"https://dart.fss.or.kr/dsac001/mainAll.do?selectDate={date_YYYYMMDD}¤tPage={page}"
s = Service(path)
driver = webdriver.Chrome(service=s)
driver.get(url)
p = '//*[@id="listContents"]/div[3]/div[2]/ul'
p_length = int(driver.find_element(By.XPATH, p).text[-1])
for i in range(p_length):
print(f"page{i+1}", end='\n')
l = len(driver.find_elements(By.TAG_NAME,"tr"))-1
for j in range(l):
time_path = f'//*[@id="listContents"]/div[2]/table/tbody/tr[{j+1}]/td[1]'
temp_time = driver.find_element(By.XPATH, time_path).text
co_path = f'//*[@id="listContents"]/div[2]/table/tbody/tr[{j+1}]/td[2]/span/a'
r_path = f'//*[@id="listContents"]/div[2]/table/tbody/tr[{j+1}]/td[3]/a'
temp_co = driver.find_element(By.XPATH, co_path)
temp_co_text = temp_co.text
temp_co_id = re.findall(r"\d{8}", temp_co.get_attribute("href"))[0]
temp_r = driver.find_element(By.XPATH, r_path)
temp_r_text = temp_r.text
temp_r_id = re.findall(r"\d{8}", temp_r.get_attribute("href"))[0]
print(temp_time, temp_co_text, temp_co_id, temp_r_text, temp_r_id)
time.sleep(0.5)
if p_length-1 > i:
btn_path = f'//*[@id="listContents"]/div[3]/div[2]/ul/li[{i+2}]/a'
driver.find_element(By.XPATH, btn_path).click()
print("-"*100)
time.sleep(2)