스타트업/프로그래밍

[프로그래밍] HTTP 통신

mezzanineX 2020. 9. 2. 14:18

*python의 request 모듈

- python의 request 모듈을 사용하면 http 통신을 사용하여, 웹페이지, open API, 이미지 등 다양한 형식의 자원에 접근 가능

 

*웹에서 수집할 수 있는 데이터의 형식

- TEXT : 단순 텍스트 파일을 내려받아서 문자열 변수에 저장해야 함

- CSV, XLSX : Pandas가 자체적으로 처리 가능

- JSON : requests 모듈을 통해 데이터를 받아온 후 JSON 클래스를 통해 DataFrame으로 변환

- HTML : requests 모듈을 통해 문자열 형태로 내려받고, beautifulsoup 클래스를 통해 데이터 추출

- 이미지, 동영상 : requests 모듈을 통해 직접 파일 다운로드 구현

 

*특정 웹 페이지 접속

- requests.get (url)

 

*접속에 실패한 경우에 대한 예외처리

- 통신결과 객체에 내장된 상태코드(status_code)값을 활용하여 통신의 성공/실패 여부를 판단.

- 200 : OK

- 400, 403 : 잘못된 접근 또는 접근 권한 없음

- 404 : Page Not Found (URL 오타)

- 50x : Server Error (접속 대상이 에러인 상황)

 

*텍스트 데이터 추출

- 수집한 컨텐츠의 인코딩 형식을 파이썬에게 알려준 후 텍스트를 추출한다.

- 인코딩 형식은 해당 데이터가 문자열을 부호화(2진수로 변환)하는데 사용한 변환방법으로 인코딩 형식을 파이썬에게 알려줘야 해당 방법을 사용해 데이터를 문자열로 사용해 데이터를 문자열로 복호화 할 수 있음 (utf-8 다국어지원)

 

*웹 페이지의 URL을 지정한 경우

- 웹 브라우저는 웹 서버로부터 HTML 소스코드를 전달받아 그래픽으로 변환하여 사용자에게 보여주는 역할을 하기 때문에 그래픽 처리 기능이 없는 requests 모듈은 웹 서버로부터 전달받은 HTML 소스코드를 그대로 반환

- 웹 페이지의 컨텐츠를 수집하기 위해서는 HTML 소스코드를 파악하고 분석해야 하기 때문에 HTML, CSS 등의 선행 지식이 반드시 필요

 

*파일 다운로드

- HTML 웹 페이지, JSON 형식의 OpenAPI, txt 파일 등은 텍스트 형식으로 식별되지만, pptx, pdf, 이미지 파일 등은 직접 다운로드 처리 형태로 수집해야 함

- 일반 텍스트 형식의 파일도 필요한 경우 다운로드 형태로 구현할 수 있음

 

*Session

- Session 이란 브라우저가 웹 사이트에 접속할 때 생성되는 통신 단위

- 웹 브라우저와 웹 사이트간에 세션이 생성될 때, 웹 브라우저는 웹 사이트에게 자신의 버전 정보를 UserAgent라는 이름으로 전송

- 웹 개발자는 UserAgent 값을 판별하여 현재 접근한 프로그램의 종류를 파악할 수 있기 때문에, UserAgent 값이 알려진 웹 브라우저와 다르다면 사이트는 비정상 접속으로 간주하고 접근을 차단하도록 구현할 수 있음

- 파이썬의 requests 모듈은 UserAgent 값이 없음

- requests 모듈에 UserAgent 값 지정 후 접근 : requests 모듈에 특정 웹 브라우저의 정보를 담는 UserAgent 값을 강제로 지정하면 대상 웹 페이지는 requests 모듈을 웹 브라우저라고 판단하고 정상적인 컨텐츠를 전달해 줌

 

*Session 객체 만들기

- 세션 객체에 포함된 headers 객체의 update() 함수를 사용하여 user-agent와 referer 값을 지정

- referer : 이전에 머물렀던 페이지 주소, referer 값이 없으면 웹 서버는 브라우저에서 직접 url을 입력한 것으로 간주

 

*get 방식 통신

- requests 모듈의 get() 함수를 사용

- 매개변수로 url 주소를 전달

- text 변수에 접근하면 결과값을 얻을 수 있음

 

*post 방식 통신

- requests 모듈의 post() 함수를 사용

- 매개변수로 url과 data를 전달

- text 변수에 접근하면 결과값을 얻을 수 있음

 

반응형