본문 바로가기
오늘의 복습 정리

데이터 수집(웹 크롤링)

by misohee 2023. 2. 28.

 

URL 살펴보기 (Uniform Resource Locator)

URL = http://news.naver.com:80/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=001&aid=0009847211#da_727145
https:// Protocol  규칙
news Sub Domain 어떤 서버 컴퓨터를 찾아갈지에 대한 IP가 들어있다.
C(URL)-->DNS(URL->IP)-->S: WAS(,DB)
# ~ 아파트 동 수 찾아가기
naver.com Domain
80  port 서버컴퓨터에서 어떤 어플리케이션을 찾아 들어갈지의 정보가 들어있다.
80,443포트는 URL에서 생략가능
(웹서비스는 보통 80,443/ DB는 3306, 27017포트를 쓴다.)
# ~ 아파트 호 수 찾아가기
/main/  path 서버 컴퓨터의 디렉토리까지 온다.
여기까지 요청하면 html코드를 받아볼 수 있다.
read.nhn  page (~file) 디렉토리의 파일까지 받아올 수 있다.
?mode=LSD&mid=
shm&sid1=
105&oid=
001&aid=
0009847211
query  내가 보고싶은 정보가 어떤 건지 클라이언트 컴퓨터가 서버 컴퓨터로
특정 데이터를 요청할 때 필요하다.
('aid = 몇 번의 데이터를 보여줘' 라는 정보이다.)
 #da_727145  fragment  전체 웹 페이지 중 어떤 위치를 화면에 띄워줄 지 정해준다.
웹크롤링할 땐 많이 사용하진 않는다.

# DNS서버(Domain Name Server)는 인터넷 망에 존재하며 URL을 IP로 바꿔준다.

클라이언트 컴퓨터 인터넷 망 서버 컴퓨터
IP주소   IP주소
어플리케이션 : 브라우저   어플리케이션 : WAS
URL입력 DNS(URL-->IP)  

브라우저의 역할 : 네트워크(request, response), 랜더링(화면으로 만들어 보여주기)

 

request: 클라이언트에서 서버로 요청하는 과정이다.

response: URL에 따라서 html코드파일,자바스크립트,pdf,exe 등을 클라이언트로 보내준다. 

 

request 방식

get방식

query를 이용해 데이터 요청하는 방식

>>문제1: 데이터를 많은 양의 데이터를 요청하고 싶을 때 url길이제한에 걸려서 곤란)

>>문제2: url에 데이터가 노출되기 때문에 패스워드 등 노출되면 안되는 정보 곤란) 

post방식

쿼리가 아닌 body(안보이지만 url아래 숨겨져있다)에 데이터가 포함, 노출 안됨

큰 데이터를 서버쪽으로 요청하거나 노출하면 안되는 정보 요청할 때 사용.

 

이미지 압축

png: 로고 등 만들어진 이미지 압축시 효율적

jpg: 사진 등 직접 찍은 실사이미지 압축시 효율적

 

용어(쿠키, 세션,캐시)

Cookie: 클라이언트에 저장하는 문자열 데이터. 도메인별로 따로 저장함

로그인 아이디 저장 , 광고시 많이 사용함(내가 봤던 상품의 정보)

1개 클라이언트에 300개 도메인당 20개 쿠키 하나당 4kbyte

 

Session: 클라이언트와 서버의 접속/연결정보를 서버에 저장하는 객체 데이터

브라우저와 연결하면 세션아이디가 생성된다.

세션아이디를 쿠키에 저장함으로써 로그인 연결 유지한다.

같은 브라우저로 같은 서버에 접속하면 세션아이디가 같다.

 

Cache: 클라이언트나 서버의 매모리에 저장하여 빠르게 데이터를 가져올 목적의 저장소.

(하드디스크가 아닌 메모리에 저장해서 빨리 쓴다는 것)

 

# pc 주요 물리 장치

CPU (연산)

메모리RAM (저장) 비싸다. 성능이 좋다.

하드디스크SSD (저장)가격낮음. 성능이 안좋다. 

로딩(=하드디스크의 데이터 중 실행해야하는 일부를 메모리에 담는 과정이다.)

 

HTTP Status Code

: request-response 과정에서 잘 되고 잇는지 확인하는 코드값

2XX: 정상적으로 잘된다.

3XX: 캐쉬를 쓰고 있다.

4XX: request error. 데이터를 요청했는데 요청한 주소에 대한 서버가 없다. (Ex) 404에러

5XX: server error: 서버는 있는데 서버 웹어플리케이션쪽에 데이터가 없다.


Web Crawing

웹 페이지 종류

동적 페이지 : 이벤트가 발생하면 서버에서 데이터를 가져와 화면을 변경하는 페이지

                      페이지의 새로고침 발생 안함

                      Json

정적 페이지 : 이벤트에 의한 화면 변경이 없는 페이지

                      페이지의 URL변경 없이는 데이터가 바뀌지 않음

                      이벤트 발생시 새로고침 발생

                      HTML 

 

 

웹 크롤링 종류

requests 이용하는 방법

     - Json 문자열로 받아 파싱 (주로 동적 페이지)

     - HTML 문자열로 받아 파싱 (주로 정적 페이지)

selenium 이용하는 방법

     -브라우저를 열어 데이터를 받는 방법

 

# 크롤링 방법 속도 : requests Json > requests HTML > selenium

     - requests Json  #적은 문자열 많은 데이터 

     - requests HTML # 많은 문자열 적은 데이터 

     - selenium  # 직접 브라우저도 열어야하고 파이썬 코드와 연결해야 해서 느림

 

크롤링 절차

1. url = '알아낸 url'

      URL 알아내기 #웹 브라우저의 개발자 도구를 사용한다.

2. response변수 = requests.get(url)

      URL로 requests 이용해 서버에 데이터 요청하기

3. data변수response변수.json()

      받아온 json/html 문자열 데이터를 list/dict 데이터로 바꿔주기 #parsing

4. 데이터 프레임 이름 = pd.DataFrame(data변수)[지정할 열]

      list/dict 데이터를 데이터 프레임으로 만들어주기 #csv, excel로 저장해 쓸 수 있다.

 


Web Language & Framework


Client
• HTML  #텍스트와 레이아웃 담당
• CSS - less, sass  #스타일 담당 (글자크기 ,색, 테두리 색)
• Javascript - vue.js, react.js, angelar.js, backborn.js  #이벤트 설정, 더보기 버튼 누르면 데이터 더 가져오기

 

 Server ( was에 들어갈 프로그램 개발시 사용)
• Python - Django, Flask 
• Java - Spring 
• Ruby - Rails 
• Javascript - Nodejs (Express)
• Scala - Play

 

**dir(객체) -->이 객체에서 쓸 수 있는 변수, 함수 등이 뭐가 있는지 알려준다.

함수+Shift+Tab --> 어떤 기능의 함수인지, 옵션은 무엇이있는지, 뭘 적어 넣어야하는지 알려준다.

help(객체변수, 함수) -->설명을 볼 수 있다.

 

import FinanceDataReader as fdr >>금융데이터 수집할때 좋은 패키지

https://financedata.github.io/posts/finance-data-reader-users-guide.html

 

https://meyerweb.com/eric/tools/dencoder/>> 한글이라 URL이 깨질때 좋은 사이트