이번 글은 코드잇 강의를 수강하면서 배운 내용을 주로 하여 정리되어 있습니다. (코드잇 스프린트 데이터 애널리스트 트랙 1기 훈련생)
웹사이트 가져오기
서버와 클라이언트
서버(Server)와 클라이언트(Client)는 컴퓨터 네트워크에서 서로 소통하며 역할을 분담하는 두 가지 주요 개념입니다. 이 개념은 웹을 비롯한 다양한 인터넷 서비스의 기반을 이루고 있습니다. 쉽게 설명해드릴게요.
클라이언트(Client): 요청하는 쪽
클라이언트는 서비스를 요청하는 장치나 프로그램입니다. 우리가 일상에서 사용하는 웹 브라우저(Chrome, Firefox 등)도 클라이언트의 한 종류입니다. 클라이언트는 사용자가 필요한 정보를 입력하고, 그 정보를 서버에 요청합니다.
예를 들어, 여러분이 웹 브라우저에서 www.example.com을 입력하면, 브라우저는 그 주소에 해당하는 웹 페이지를 요청합니다. 이 요청을 받은 서버는 해당 페이지를 찾아서 클라이언트(즉, 브라우저)에게 보내줍니다.
서버(Server): 응답하는 쪽
서버는 클라이언트의 요청을 처리하고, 그에 맞는 서비스를 제공하는 장치나 프로그램입니다. 서버는 클라이언트가 요청한 데이터를 제공하거나, 특정 작업을 수행한 후 그 결과를 클라이언트에게 반환합니다.
예를 들어, www.example.com이라는 웹 페이지를 요청받은 서버는 그 페이지의 내용을 클라이언트에게 보내줍니다. 서버는 데이터베이스에서 정보를 검색하거나, 웹 페이지를 생성하여 클라이언트에게 전달하는 등의 작업을 수행합니다.
서버와 클라이언트의 상호작용
서버와 클라이언트는 항상 쌍으로 작동합니다. 클라이언트가 요청(Request)을 보내면, 서버는 그 요청을 받아 처리하고, 결과를 응답(Response)으로 돌려줍니다.
- 요청: 클라이언트가 서버에 어떤 작업을 해달라고 요청합니다(예: 웹 페이지를 보여주세요).
- 응답: 서버가 요청을 처리한 결과를 클라이언트에게 돌려줍니다(예: 요청한 웹 페이지를 클라이언트에게 전달).
예시로 본 서버와 클라이언트
- 웹사이트 방문: 웹 브라우저(클라이언트)가 웹 서버에 특정 페이지를 요청합니다. 서버는 요청받은 페이지를 찾아 클라이언트에 보내고, 브라우저는 그 페이지를 화면에 표시합니다.
- 이메일: 이메일 프로그램(클라이언트)이 이메일 서버에 연결하여 새로운 이메일을 요청합니다. 서버는 받은 이메일을 클라이언트로 보내줍니다.
웹사이트를 가져오는데 필요한 라이브러리 설치하기
Python에서 웹사이트의 데이터를 가져오기 위해 자주 사용되는 라이브러리 중 하나가 requests입니다.
requests 라이브러리는 웹사이트에 HTTP 요청을 보내고, 그에 대한 응답을 쉽게 받을 수 있도록 도와줍니다.
requests 라이브러리 설치
requests 라이브러리를 사용하려면 먼저 설치해야 합니다. Python에서 라이브러리를 설치할 때는 pip3라는 패키지 관리자를 사용합니다.
설치 명령어:
pip3 install requests
이 명령어를 터미널(또는 명령 프롬프트)에서 입력하면, requests 라이브러리가 설치됩니다. 설치가 완료되면, Python에서 requests를 사용해 웹사이트와 쉽게 상호작용할 수 있습니다.
requests 설치 방법
- 터미널 또는 명령 프롬프트 열기: 먼저, Python이 설치된 환경에서 터미널(Mac/Linux) 또는 명령 프롬프트(Windows)를 엽니다.
- 명령어 입력:
- pip3 install requests를 입력하고 엔터 키를 누릅니다.
- 설치 과정이 시작되며, 몇 초 안에 완료됩니다.
- 설치 확인:
- 설치가 완료되면 별다른 오류 메시지가 나타나지 않아야 합니다.
- pip list 명령어를 입력하여 설치된 패키지 목록을 확인할 수 있습니다. 여기서 requests가 목록에 포함되어 있으면 정상적으로 설치된 것입니다.
파이썬으로 웹사이트에 요청 보내기
equests 라이브러리는 매우 직관적이고 사용하기 쉬워서, 웹 서버와 상호작용하는 데 자주 사용됩니다. 다음은 requests를 사용해 HTTP 요청을 보내고 응답을 처리하는 기본적인 방법입니다.
get 요청 보내기
가장 일반적인 HTTP 요청 방법은 get입니다. get 요청은 서버에서 데이터를 가져오는 데 사용됩니다.
예시 코드:
import requests
# GET 요청을 보내고 응답을 받아오기
response = requests.get('<https://www.example.com>')
# 응답 상태 코드 출력
print(response.status_code)
# 응답 내용 출력 (HTML 또는 JSON 데이터)
print(response.text)
설명:
- requests.get('https://www.example.com'): 지정된 URL에 GET 요청을 보냅니다. 서버는 이 요청에 대한 응답으로 데이터를 반환하고, 이 데이터는 response 객체에 저장됩니다.
- response.status_code: 응답의 상태 코드를 확인합니다. 200은 요청이 성공적으로 이루어졌음을 의미합니다.
- response.text: 서버가 응답한 내용을 텍스트 형식으로 출력합니다. 이 내용은 HTML 또는 JSON 데이터일 수 있습니다.
웹사이트 주소 이해하기
웹사이트를 방문할 때, 우리가 브라우저 주소창에 입력하는 것이 바로 **URL(Uniform Resource Locator)**입니다. URL은 인터넷 상에서 특정 리소스를 찾기 위한 주소 역할을 합니다.
쉽게 말해, URL은 웹에서 우리가 원하는 정보를 찾아가기 위한 "지도" 같은 것입니다. 밑에서 URL을 구성하는 요소에 대해 설명하도록 하겠습니다.
프로토콜
프로토콜은 브라우저가 서버와 소통하는 방법을 지정합니다. 가장 흔히 사용되는 프로토콜은 http://와 https://입니다.
- http:// : 웹사이트에 접속하기 위한 기본적인 방법입니다. 하지만 보안이 취약할 수 있습니다.
- https:// : 보안이 강화된 버전으로, 데이터를 암호화하여 안전하게 주고받을 수 있습니다. 온라인 쇼핑몰이나 은행 사이트 등 보안이 중요한 곳에서는 https://를 사용합니다.
예시: https://www.example.com
도메인 이름
도메인 이름은 웹사이트의 고유한 이름으로, 우리가 방문하고자 하는 웹사이트를 가리킵니다. 도메인 이름은 웹사이트의 "집 주소"라고 생각할 수 있습니다. 예를 들어, www.example.com은 특정 웹사이트의 도메인 이름입니다.
- www : 월드 와이드 웹(World Wide Web)의 약자이며, 대부분의 도메인 이름 앞에 붙습니다.
- example.com : 웹사이트의 이름과 그에 연결된 주소입니다. .com, .org, .net 등은 도메인 이름의 끝에 붙는 확장자입니다.
예시: https://www.example.com
경로(Path)
경로는 도메인 내에서 특정 페이지나 파일로 안내하는 부분입니다. 도메인 이름이 집 주소라면, 경로는 그 집 안에서 특정 방이나 위치를 가리키는 것과 같습니다.
- 예를 들어, https://www.example.com/about.html에서 /about.html은 웹사이트 내에서 "소개" 페이지를 가리킵니다.
경로는 페이지, 이미지, 파일 등 웹사이트 내의 다양한 리소스를 가리킬 수 있습니다.
쿼리 문자열(Query String)
쿼리 문자열은 웹 페이지에 추가적인 데이터를 전달할 때 사용됩니다. 이는 URL의 끝에 ? 기호로 시작하며, 특정 정보를 서버로 전달하여 웹 페이지를 더 구체화하거나 필터링된 정보를 보여줄 수 있습니다.
- 예를 들어, https://www.example.com/search?query=python에서 ?query=python은 "python"이라는 검색어를 서버로 전달하여, 검색 결과 페이지를 표시하라는 요청을 의미합니다.
쿼리 문자열은 여러 개의 값을 포함할 수 있으며, 이들은 & 기호로 구분됩니다.
프래그먼트(Fragments, # 부분)
프래그먼트는 URL의 마지막 부분으로, 페이지 내 특정 위치로 사용자를 안내합니다. 프래그먼트는 # 기호로 시작하며, 특정 섹션이나 요소에 대한 링크를 제공합니다.
- 예를 들어, https://www.example.com/about.html#team에서 #team은 "소개" 페이지의 특정 부분(예: 팀 소개 섹션)으로 사용자를 이동시킵니다.
프래그먼트는 주로 긴 웹 페이지에서 특정 위치로 빠르게 이동하기 위해 사용됩니다. 이는 페이지 내에서 스크롤을 통해 찾을 필요 없이 바로 해당 위치로 이동할 수 있게 해줍니다.
여러 웹사이트 한꺼번에 가져오기
여러 웹사이트를 한꺼번에 가져오는 것은 웹 스크래핑이나 데이터 수집 작업에서 매우 유용합니다. Python에서 여러 웹사이트를 동시에 가져오기 위해 주로 사용하는 방법은 requests 라이브러리와 반복문을 결합하는 것입니다.
기본적인 방법: requests와 반복문 사용
가장 기본적인 방법은 requests 라이브러리를 사용하여 웹사이트를 하나씩 순차적으로 가져오는 것입니다. 이를 위해 반복문을 사용하여 여러 URL에 대한 요청을 처리할 수 있습니다.
예시:
import requests
# 가져올 웹사이트들의 리스트
urls = [
'<https://www.example.com>',
'<https://www.anotherexample.com>',
'<https://www.yetanotherexample.com>'
]
# 각 URL에 대해 get 요청 보내기
for url in urls:
response = requests.get(url)
print(f'{url}의 상태 코드: {response.status_code}')
print(f'{url}의 콘텐츠 길이: {len(response.text)}')
설명:
- urls: 가져오고자 하는 웹사이트들의 URL을 리스트로 작성합니다.
- 반복문: 각 URL에 대해 requests.get()을 사용하여 get 요청을 보내고, 응답을 처리합니다.
- 출력: 각 URL에 대한 상태 코드(응답의 성공 여부)와 콘텐츠 길이를 출력합니다.
이 글에서는 코드잇 강의를 통해 배운 서버와 클라이언트의 개념, 웹사이트 요청을 위한 Python의 requests 라이브러리 사용법, 그리고 여러 웹사이트를 한꺼번에 가져오는 방법에 대해 정리해보았습니다. 이러한 기초 지식은 데이터 분석과 웹 스크래핑 작업에 있어 매우 중요한 기반을 이루며, 실무에서 다양한 데이터를 수집하고 처리하는 데 큰 도움이 될 것입니다. 앞으로도 이와 같은 유용한 지식을 꾸준히 습득하며 데이터 분석 역량을 강화해 나가길 바랍니다.
감사합니다!
출처 및 참고자료 : 코드잇 사이트 강의 '웹 자동화' https://www.codeit.kr/topics/web-automation
'프로그래밍 > 데이터 분석' 카테고리의 다른 글
[데이터 분석 심화 개념] 웹 자동화 개념 정리 4️⃣ (Beautifulsoup) (0) | 2024.08.23 |
---|---|
[데이터 분석 심화 개념] 웹 자동화 개념 정리 3️⃣ (웹 스타일링) (0) | 2024.08.21 |
[데이터 분석 심화 개념] 웹 자동화 개념 정리 1️⃣ (웹의 기본 요소) (0) | 2024.08.18 |
[데이터 분석 심화 개념] 장바구니 분석 개념 정리 3️⃣ (순차 패턴 마이닝, PrefixSpan 알고리즘) (0) | 2024.08.16 |
[데이터 분석 심화 개념] 장바구니 분석 개념 정리 2️⃣ (연관 규칙 알고리즘) (1) | 2024.08.15 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!