[230111] 멋쟁이사자처럼 AI SCHOOL 8기 '네이버 금융 일별시세 웹스크래핑_박조은강사님' 복습

조세연·2023년 1월 12일
0

멋사 AI SCHOOL 8기

목록 보기
13/35

📝Today I learned

🚀 TIL 목차 🚀

  • requests와 BeautifulSoup을 활용한 웹스크래핑
    • requests와 BeautifulSoup
    • requests와 BeautifulSoup 사용해보기

requests를 활용한 웹스크래핑

1) requests와 BeautifulSoup

  • requests
    : pd.read_html로 바로 웹스크래핑이 안되는 경우 html 텍스트를 받아올 때 사용하는 라이브러리
    : Status Code == 200 OK : 정상 응답
    : Request Method == get : 필요한 데이터를 query string에 담아 전송
    : Request Method == post : 전송할 데이터를 HTTP 메시지의 Body의 Form Data에 담아 전송
    : headers 설정 : user-agent 항목을 활용해 수집하고자 하는 사이트에 우리는 봇이 아니라고 알려줌

  • BeautifulSoup
    : requests로 받아온 html 코드를 python이 이해하는 객체 구조로 변환하기 위해 parsing해주는 라이브러리
    : BeautifulSoup을 통해 비로소 우리가 원하는 정보를 뽑아올 수 있는 것

2) requests와 BeautifulSoup 사용해보기

🔹 필요한 라이브러리 가져오기

import pandas as pd
import requests
from bs4 import BeautifulSoup as bs

🔹 수집할 url 정하기

item_code = "005930"
item_name = "삼성전자"
page_no = 1

url = f"https://finance.naver.com/item/sise_day.naver?code={item_code}&page={page_no}"
url

🔹 read_html로 크롤링 시도 -> 실패!!!

pd.read_html(url) # ValueError: No tables found

🔹 resquests를 통해 http 요청하기

headers = {"user-agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
response.status_code # 200이 나오면 정상 응답
  • header값 가져오는 법
    : 브라우저 > 마우스 우클릭 > '검사(Inspect)' 클릭 > network 탭 > 좌측 Name 중 아무거나 클릭 > headers 탭의 가장 아래 'user-agent' 참고

🔹 response값 확인

print(response.text)

🔹 BeautifulSoup를 통해 table 태그 찾기

html = bs(response.text)
table_day = html.select("table")[0] # 직접 html 코드를 살펴보면서 원하는 정보 경로를 디테일하게 입력할 수도 있음

근데 일단 BeautifulSoup말고 쉬운 read_html로 데이터를 수집해보겠습니당

🔹 read_html로 데이터 수집하기

table = pd.read_html(response.text)
table[0] # table이라는 리스트의 0번째 값이 우리가 원하는 값

🔹 결측치 제거

temp = table[0].dropna()
temp

위 과정을 모두 포함한 함수를 만들면 '한 페이지의 일별 시세를 수집'할 수 있음
반복문으로 페이지를 넘기면서 수집하면 끝!

❗이것만은 외우고 자자 Top 3

📌 requests : pd.read_html로 바로 웹스크래핑이 안되는 경우 html 텍스트를 받아올 때 사용하는 라이브러리

📌 BeautifulSoup : requests로 받아온 html 코드를 python이 이해하는 객체 구조로 변환하기 위해 parsing해주는 라이브러리

📌 header값 가져오는 법
: 브라우저 > 마우스 우클릭 > '검사(Inspect)' 클릭 > network 탭 > 좌측 Name 중 아무거나 클릭 > headers 탭의 가장 아래 'user-agent' 참고

🌟데일리 피드백

1. 오늘의 칭찬&반성

질문을 정말 많이 했다.. 하지만 모르는 게 있음에도 질문하지 않은 것이 있었다..

2. 내가 부족한 부분

특정 날짜 이전까지만 데이터를 수집하는 알고리즘.. 아직도 이해가 안된다. 함수 안에서 while문을 멈출 때 날짜로 멈추는 것이 소용이 없는데 왜 이렇게 하는거지?

3. 내일의 목표

특정 날짜 이전까지만 데이터를 수집하는 알고리즘 이해하기!!!

profile
HR Analyst가 되고 싶은

0개의 댓글