파이썬 웹 크롤링
크롤러 : 알고리즘에 의해 인터넷을 탐색하는 프로그램
크롤링 : 크롤러가 웹페이지들을 돌아다니는 행위
스크래퍼 : 웹페이지의 데이털르 수집하는 프로그램
스크래핑 : 특정 페이지의 데이터를 수집하는 행위
- 통상적으로 크롤링과 스크래핑을 합쳐서 크롤링이라고 표현한다.

웹 크롤링 방식
- 정적 크롤링
- 어느 상황에서나 같은 주소에서 변하지 않는 데이터를 기대할 수 있는 경우 사용한다.
- 수집 대상의 한계가 있으나 속도가 빠르다.
- 사용모듈 : BeautifulSoup
- 동적 크롤링
- 입력, 클릭 등 실제 브라우저에서 행하는 행동들을 해야만 데이터를 수집할 수 있는 경우 사용한다.
- 수집 대상에 한계가 적으나 속도가 느리다.
- 사용 모듈 : Selenium
웹 크롤링에서 각자의 장 단점이 있기 때문에 그것을 보완하기 위해서 두가지 방법을 혼용해서 사용하기도 한다.
DOM(Document Object Model) tree

DOM : 웹 문서를 브라우저가 이해할 수 있는 구조로 구성하여 메모리에 적재하는 것이다.
DOM tree : HTML 문서를 로드한 후 파싱하여 생성하는 모델이다.
requests 로 웹페이지 접속하기
import requests as rq
url = "https://www.naver.com/"
rq.get(url)
# 결과값
# <Response[200]>
rq.post(url)
# 결과값
# <Response[200]>
헤더 가져오기
url = "https://www.naver.com/"
res = rq.get(url)
print(res)
# <Response [200]>
print(res.headers)
# 결과값
# {'Server': 'NWS', 'Date': 'Tue, 09 May 2023 06:44:00 GMT', 'Content-Type': 'text/html;
# charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive',
# 'Set-Cookie': 'PM_CK_loc=7a94dedc52a4b786559b931355f135e120032aaeb7b62cee18e67322ab073abb;
# Expires=Wed, 10 May 2023 06:44:00 GMT; Path=/; HttpOnly',
# 'Cache-Control': 'no-cache, no-store, must-revalidate',
# 'Pragma': 'no-cache', 'P3P': 'CP="CAO DSP CURa ADMa TAIa PSAa OUR LAW STP PHY ONL UNI PUR FIN COM NAV INT DEM STA PRE"',
# 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'Content-Encoding': 'gzip', 'Strict-Transport-Security': 'max-age=63072000;
# includeSubdomains', 'Referrer-Policy': 'unsafe-url'}
HTML 코드 가져오기
print(res.text)
# 코드가 너무 길어서 생략함..
바이너리 형태의 HTML 코드 가져오기
print(res.content)
# 코드가 너무 길어서 작성하지 못함
바이너리 형태로 값을 가져오기 때문에 res.text에서 한글이 깨지는 현상을 방지할 수 있다.
쿼리스트링 데이터 생성하기
쿼리스트링이란 클라이언트가 서버에 보내는 데이터를 말한다.
url 부분에서 리소스 경로 뒤에 물음표(?)로 시작하는 부분을 쿼리스트링이라고 부른다.
res = rq.get(url, params = {"key1" : "value1", "key2" : "value2"})
print(res.url)
# 결과값
# https://www.naver.com/?key1=value1&key2=value2
urllib으로 웹페이지 접속해보기
from urllib.request import urlopen
url = "https://www.naver.com"
page = urlopen(url) # 요청 객체를 이용해 요청
print(page)
# 결과값
# <http.client.HTTPResponse object at 0x7fd252198b80>
서버 응답 코드 확인하기
서버 응답 코드는 서버가 클라이언트 요청을 처리하고 난 후 상태에 따라 반환하는 코드를 말한다.

print(page.code)
# 결과값
# 200
header 정보 확인하기
print(page.headers)
# 결과값
# Server: NWS
# Date: Tue, 09 May 2023 07:17:58 GMT
# Content-Type: text/html; charset=UTF-8
# Transfer-Encoding: chunked
# Connection: close
# Set-Cookie: PM_CK_loc=8bc1f7b05f74998dd8955c1f673a7548cf8cad309bbfbe8cdc3309c0b5ed234f; Expires=Wed, 10 May 2023 07:17:58 GMT; Path=/; HttpOnly
# Cache-Control: no-cache, no-store, must-revalidate
# Pragma: no-cache
# P3P: CP="CAO DSP CURa ADMa TAIa PSAa OUR LAW STP PHY ONL UNI PUR FIN COM NAV INT DEM STA PRE"
# X-Frame-Options: DENY
# X-XSS-Protection: 1; mode=block
# Strict-Transport-Security: max-age=63072000; includeSubdomains
# Referrer-Policy: unsafe-url
url 확인하기
URL(Uniform Resource Locator) 은 사용자가 원하는 정보의 위치와 종류를 파악할 수 있도록 웹페이지의 정보 구조를 반영한 것이다.
URL 에는 총 5가지 종류들이 합쳐져서 만들어졌다.
- 프로토콜
- 프로토콜이란 웹사이트에서 서버와 클라이언트간에 어떤 방법으로 자원을 접근할지 알려주는 통신 규악 중 하나이다.
- 인터넷에서 주로 사용하는 것은 http, https 이다.
- 그 외의 것들엔 FTP, SFTP, SSH 등이 있다.
- 도메인(주소 또는 IP)
- 도메인이란 URL에서 웹서버의 위치를 지정하는 부분이다.
- 포트번호
- 포트번호는 웹서버에서 자원을 접근하기 위해 사용하는 게이트 번호이다.
- http는 80, https는 443, FTP는 20 또는 21, SSH는 22번 등 프로토콜에 따라서 기본 포트번호가 지정이 되어있다.
- 리소스 경로
- 주소 뒤에 슬래시(/)로 시작하는 부분을 의미하며 클라이언트가 요청하는 리소스의 경로가 포함된다.
- 쿼리스트링
- 클라리언트가 서버에 보내는 데이터로 리소스 경로 뒤에 물음표(?)로 시작하는 부분을 말한다.
print(page.url)
# 결과값
# https://www.naver.com
html 확인하기
urllib을 사용하면 반드시 바이너리 형태로 보여준다.
print(page.read())'Python' 카테고리의 다른 글
| 파이썬 동적 크롤링 (1) | 2023.05.11 |
|---|---|
| 파이썬 정적 크롤링 (0) | 2023.05.10 |
| 파이썬 상속 (0) | 2023.05.10 |
| 파이썬 프라이빗 변수와 getter, setter (1) | 2023.05.10 |
| 파이썬 가비지 컬렉터 (1) | 2023.05.10 |