- requests와 BeautifulSoup을 활용한 웹스크래핑
- requests와 BeautifulSoup
- 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을 통해 비로소 우리가 원하는 정보를 뽑아올 수 있는 것
🔹 필요한 라이브러리 가져오기
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이 나오면 정상 응답
🔹 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
위 과정을 모두 포함한 함수를 만들면 '한 페이지의 일별 시세를 수집'할 수 있음
반복문으로 페이지를 넘기면서 수집하면 끝!
📌 requests : pd.read_html로 바로 웹스크래핑이 안되는 경우 html 텍스트를 받아올 때 사용하는 라이브러리
📌 BeautifulSoup : requests로 받아온 html 코드를 python이 이해하는 객체 구조로 변환하기 위해 parsing해주는 라이브러리
📌 header값 가져오는 법
: 브라우저 > 마우스 우클릭 > '검사(Inspect)' 클릭 > network 탭 > 좌측 Name 중 아무거나 클릭 > headers 탭의 가장 아래 'user-agent' 참고
질문을 정말 많이 했다.. 하지만 모르는 게 있음에도 질문하지 않은 것이 있었다..
특정 날짜 이전까지만 데이터를 수집하는 알고리즘.. 아직도 이해가 안된다. 함수 안에서 while문을 멈출 때 날짜로 멈추는 것이 소용이 없는데 왜 이렇게 하는거지?
특정 날짜 이전까지만 데이터를 수집하는 알고리즘 이해하기!!!