[18일차] ASAC 빅데이터 분석가 4기(WebCrawling-2)

2023. 12. 26. 15:27· ASAC 빅데이터 분석가 4기/Web Crawling
목차
  1. ⚙️ Web Crawling
  2. 📌 Web Crawling 중 403 ERROR 해결
  3. 📌 Selenium
  4. ⚙️ 실습
  5. 📝 Selenium 실습

⚙️ Web Crawling

📌 Web Crawling 중 403 ERROR 해결

  • urllib 사용법
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
  • requests 사용법
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}&currentPage={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)
저작자표시 비영리 변경금지 (새창열림)
  1. ⚙️ Web Crawling
  2. 📌 Web Crawling 중 403 ERROR 해결
  3. 📌 Selenium
  4. ⚙️ 실습
  5. 📝 Selenium 실습
'ASAC 빅데이터 분석가 4기/Web Crawling' 카테고리의 다른 글
  • [19일차] ASAC 빅데이터 분석가 4기(WebCrawling-3)
  • [17일차] ASAC 빅데이터 분석가 4기(WebCrawling-1)
zzzini
zzzini
종착지는 어디인지 모르지만
zzzini
나의 표류일지
zzzini
전체
오늘
어제
  • 분류 전체보기 (307)
    • ASAC 빅데이터 분석가 4기 (44)
      • Python기초 (6)
      • SQL (3)
      • Matplotlib & Seaborn (2)
      • Data Handling (6)
      • Web Crawling (3)
      • Machine Learning (9)
      • Deep Learning (10)
      • 데이터 분석 (1)
      • 기타 (2)
      • 수학 (2)
    • 코딩 테스트 준비 (168)
      • 5정한 (132)
      • 카카오 (14)
      • PCCP & PCCE (3)
      • 프로그래머스 (19)
    • 자격증 (35)
      • AWS CLF-C02 (18)
      • AWS SAA-C03 (1)
      • Tableau Desktop Specialist (5)
      • Tableau Certified Data Anal.. (11)
    • 독서 (17)
    • Tech (23)
      • Tableau (10)
      • AI (4)
      • Flask (1)
      • Node.js (2)
      • Cloud Computing (2)
      • Git & GitHub (1)
      • Notion API (1)
      • Linux (2)
    • Projects (2)
    • 알고리즘 공부 (6)
    • 🎵 (11)

블로그 메뉴

  • 글 쓰기
  • 홈
  • 방명록

공지사항

hELLO · Designed By 정상우.v4.2.1
zzzini
[18일차] ASAC 빅데이터 분석가 4기(WebCrawling-2)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.