[데이터분석] 데이터 가져오기 : 크롤링(Crawling), API
데이터를 가져오는 방법?
옵션1. API 사용 : 제공되는 API를 통해 데이터를 쉽게 가져온다.
옵션2. 크롤링 : API가 제공되지 않는 (대부분의) 경우 > 직접 웹페이지에서 필요한 데이터만 추출해서 가져온다.
API (Application Programming Interface)
데이터 제공자 입장에서 API를 통해 데이터를 제공하는 이유?
1) API Key : 허락된 사람에게만 정보를 제공하고(API key), 누가 수집해 갔는지 알기 위해
2) 용량/요금 측정 : 유료로 데이터를 판매하고 있는 사이트는 데이터 용량 등에 따라 과금하기도 함.
3) 실시간성 정보 : 공공데이터는 실시간성으로 제공하고자 하는 데이터의 경우 (ex. 부동산 실거래가 정보 등)
4) 네트워크 부담 : 특정 사이트에 무리하게 네트워크 요청을 보내면 서버에 무리가 갈 수 있음.
-> API서버를 따로 두게 되면 데이터를 무리하게 읽어 갔을 때 운영하고 있는 서비스의 서버에 무리가 가지 않게 분리해서 운영할 수 있음
5) 공개 범위 설정 : API를 통해 특정 범위의 데이터만 제공 (ex. Facebook API : 본인 계정에 대한 정보만 수집 가능하도록 API 제공)
Crawling 크롤링 (웹스크래핑)
1. 크롤링 - ⚠️ 주의할 점
1) 크롤링은 네트워크 요청이 발생 > 서버에 부담이 생길 수 있음 > time.sleep() 등을 통해 시간적 여유를 둬야 함
2) 저작권 : 특정 데이터는 영업권 침해 등으로 법적인 문제가 발생할 수 있음
3) 분쟁사례 : 사람인-잡코리아 (유죄판결), 여기어때-야놀자 (무죄판결) 등 관련 분쟁이 많이 일어남
4)🤖 로봇배제표준 Robots.txt : 로봇이 제한하는 것을 방지하기 위한 안내판 같은 역할 : 권고안
· Disallow : / : 모든 경로의 데이터를 가져가지 말라
· Allow : / $ : 가장 상위 페이지(첫 페이지)만 허용
· / : 가장 상위 경로
· ./ : 해당 경로
· ../ : 상위 경로
2. 크롤링 방법
"크롤링은 리버스 엔지니어링 (reverse engineerring) 과정이다."
· 웹 페이지는 만드는 기업, 사람, 내용마다 구성되는 방식이 달라짐
· 이 중 필요한 데이터만 받아오려면 해당 페이지가 어떻게 구성되어 있는지 알아야 함
· header, referer, parameter 설정, 로그인 키 등 서버에서 막을 수 있는 한 막아놓은 사이트는 왜 막혔는지 리버스 엔지니어링이 필요
· tip! : inspect(F12) > network > doc > 필요한 url 찾기
방법1 : pd.read_html()
- url, html, 소스코드를 넣어주면 table tag를 찾아서 반환
· 1) url을 통해 request로 요청 -> html 소스코드 받아옴
· 2) html 소스코드에서 table tag (<table> </table>) 확인
· 3) table 태그가 있다면 데이터프레임으로 변환해서 리스트 형태로 반환
방법2 : requests, beautifulSoup
- requests
· .get(url) 방식과 .post(url) 방식이 있음 > 페이지 네트워크 탭에서 Request Method 확인 필요
· response.status == 200 ok 여도 안되는 경우 > 웹페이지에서 봇으로 인식하는 것 -> header에 user agent 값을 넣어준다
- BeautifulSoup
· html, xml 등에서 원하는 값을 얻기 위해 사용하는 parsing 도구
· 받아온 html을 사용하기 쉽게 만들어줌
방법3 : 셀레니움 Selenium
- 셀레니움을 사용해야 하는 경우 : 로그인이 필요할 때, url만으로는 수집이 불가할 때, 사이트가 변경되거나 서버 정책이 변경되어서 기존의 수집코드가 작동하지 않는 경우
- 셀레니움을 추천하지 않는 이유 : 본래 셀레니움은 브라우저 테스트 목적 -> 무겁고 리소스를 많이 사용함. -> 가능하다면 request를 사용하는 것이 더 효율적임.
단어장
FinanceDataReader : KRX 한국거래소, 주가지표, 지수 제공
docstring :
- 함수에 대해 설명해주는 글
- 작성: 함수이름 바로 밑에 """ """를 이용하여 작성함 / 보기: ?도움말 출력
- 파이썬은 문서화를 중시함. 대부분의 인기 있는 라이브러리(numpy, pandas, scikit-learn)을 보면 문서화가 잘 되어 있는 편임. -< docstring에 함수의 사용 예시까지 자세히 나옴.
Dunder (double under) : __
trange : 오래 걸리는 반복작업에 사용
- for n in trange(1, max_no) : => (console: 40% ■■■■ | 4/10)