728x90
인터넷의 원리

- 인터넷: 요청을 보내는 클라이언트(client)와 요청에 응답을 하는 서버(server)로 구성
- 웹(www): 인터넷의 한 종류로 그림, 음악, 글 등이 어우러진 하이퍼텍스트(hypertext)를 중심으로 구성된다
- HTTP(HyperText Transfer Protocol): 웹에서 사용하는 통신 규약
- HTML(HyperText Markup Language): 웹 브라우저 상에 보이는 웹 문서를 표현하는 양식, 구조를 형성
- => HTTP는 전송 방법이고 HTML은 파일 형식
- CSS: HTML에서 서식을 지정할 때 사용, 시각적 디자인과 레이아웃 표현
- JavaScript: HTML에 여러 가지 동적인 기능을 덧붙여주는 프로그래밍 언어, front-end
HTTP
- 웹에서 데이터를 주고 받는 방법에 대한 규칙 (프로토콜)
- HTTP는 클라이언트가 서버에 요청을 보내면, 서버가 응답하는 방식으로 통신이 이루어진다
- 요청의 종류에 따라 GET, POST 등 다양한 방법이 있다
GET
- requests
- 서버 측에 존재하는 데이터를 가져오기 위한 요청 방법
- 하나의 URL 주소의 대상에 GET 요청을 보내면 서버는 원칙적으로 동일한 응답을 해야 한다
HTTP 상태 코드
- 서버는 응답을 할 때 상태 코드를 전송한다. 상태코드는 세 자리 숫자로 되어 있다
2XX : 성공, 보통 200을 사용
3XX : 리다이렉션. 요청한 URL이 다른 URL로 이동했다. 301(영구이동) 302(임시이동)
4XX : 요청 오류. 잘못된 요청을 보낸 경우. 404(찾을 수 없음)
5XX : 서버 오류. 버그나 장애 등 서버 측의 오류. 500(내부 서버 오류), 502(불량 게이트웨이)
BeautifulSoup을 활용한 웹 스크래핑
- beautifulsoup4: HTML 요소들을 분석하는 패키지
- html5lib: HTML 문서를 parsing(분석)
- requests: HTTP 요청(request)을 보내고, 서버로부터 응답(response)을 받는 기능 담당
- find_all: 해당하는 모든 요소를 찾음(많이 쓰임)
- select: 해당하는 모든 요소를 찾음
- soup.select(css_selector): soup 객체에서 CSS 선택자로 요소들을 찾는 방법
soup.태그이름 = soup.find('태그이름')
HTML 하위 요소(sub/child element)를 찾는 방법
- parent_selector > child_selector
- ancestor_selector(조상 선택자) descendant selector(자손 선택자)
HTML 특정 내용 추출 방법
- CSS 선택자
- XPATH
CSS 선택자
- class: .
- id: #
- 모든 요소 선택: *
class 이름으로 선택
<table class="container"></table>.container
특정 태그의 class 선택
<p class="intro"></p>
p.intro
id 이름으로 선택
<div id="wrap"> <!-- 전체 레이아웃 시작 -->
</div> -- <!-- 전체 레이아웃 끝 -->#wrap
클래스가 여러 개일 경우
<p class='class_1 class_2'>...</p>
p.class_1.class_2
특정 태그 밑에 있는 부분 선택
<a class='class_1'>1번 값</a>
<li>
<a class='class_1'>2번 값</a>li a.class_1
웹 주소(URI, URL)의 형식
프로토콜://서버주소[:포트번호]/경로?쿼리스트링
https://comic.naver.com/webtoon/list.nhn?titleId=703846&weekday=tue
쿼리스트링(query string) : 클라이언트(브라우저)가 서버로 보내는 정보
param이름=param값
파라미터가 여러 개일 경우 : &로 파라미터들을 구분