본문 바로가기

[python]/웹 크롤링

[웹 크롤링] 6. 정적 크롤링(1)

728x90

◆ 크롤링 대상 사이트 살펴보기

 

크롤링을 할 때는 꼭 해당 웹 사이트를 살펴봐야한다.

바로 정적 크롤링 / 동적 크롤링 중 어떤 것이 적합할지 정해야 하기 때문이다.

 

 

로또 당첨 번호의 경우는 어떨까?

https://dhlottery.co.kr/gameResult.do?method=byWin 

 

로또6/45 - 회차별 당첨번호

1015회 당첨결과 (2022년 05월 14일 추첨) 당첨번호 14 23 31 33 37 40 1015회 순위별 등위별 총 당첨금액, 당첨게임 수, 1게임당 당첨금액, 당첨기준, 비고 안내 순위 등위별 총 당첨금액 당첨게임 수 1게임

dhlottery.co.kr

 

하나의 웹 페이지 안에 필요한 당첨 번호가 나타나 있다.

 

F12를 눌러서 검사창은 켜준다,

 

 

다음 select버튼을 클릭하여 원하는 데이터가 포함된 HTML 태그를 찾는다.

태그는 'div'이고 class는 'nums'인 HTML 요소 <div class = 'nums'> 안에 

원하는 당첨 번호가 모두 포함되어 있다.

 

살펴보면 <div class = 'nums'>안에

<div class = 'num win'><div class = 'num bonus'> 태그가 포함되어 있다.

 

이렇게 HTML은 포함관계를 가진다.

 

당첨번호를 볼려면 나타날 때까지 태그를 열어주면 된다.

 

<div class = 'nums'>
	<div class = 'num win'>
    	<strong></strong>
        <p>
        	<span></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        <p>
    </div>
    <div class = 'num bonus'>
    	<strong></strong>
        <p>
        	<span></span>
        </p>
    </div>
</div>

여기서 <div class = 'nums'> 라는 큰 태그 안에 'span' 태그는 7개이다

'span' 태그를 뽑으면 당첨번호를 모두 수집가능하다.

 

이 웹 사이트의 특징을 정리하자면

☆웹 사이트의 주소에 접속하면, 한 페이지 내에 원하는 데이터 등장

☆원하는 데이터의 태그를 볼려고 클릭,입력,페이지 이동 등의 변화가 없어도 수집 가능

 

고로 페이지 조작이 필요하지 않으므로, 정적크롤링을 사용하는게 훨씬 효율적이다.

 

◆ 라이브러리 'requests'

정적크롤링을 사용하기 위해서 필요한 라이브러리는 'requests'이다.

requests 는 파이썬에서 웹에 요청을 전송 시켜주는 라이브러리.

 

 

◆ 웹사이트의 HTML 불러오기

 

크롤링을 하기 위해서는 웹 사이트의 HTML의 코드를 불러와야한다.

 

그러기 위해서는 

get() 함수가 필요하다.

get()는 웹 페이지의 내용을 요청하는 함수이다.

 

requests.get('불러올 URL')

 

◆ 파이썬 코드 작성

라이브러리 import

import requests

다음은 크롤링 할 웹 페이지의 주소 변수에 저장 후 요청

 

import requests

URL = 'https://dhlottery.co.kr/gameResult.do?method=byWin'
raw = requests.get(URL)
print(raw)

get함수는 웹 페이지에 '데이터를 주세요' 라고 요청을 전송하는 함수이기 떄문에

raw 변수 값을 출력해보면 데이터가 아닌 요청이 성공했는지 여부가 출력된다.

 

<Response [200]>은 get 함수를 통해 보낸 요청이 정상적으로 처리되었다는 의미

 

요청이 어떻게 처리되었는지에 따라 404,500 등의 값을 가짐

https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C 

 

HTTP 상태 코드 - 위키백과, 우리 모두의 백과사전

아래는 HTTP(하이퍼텍스트 전송 프로토콜) 응답 상태 코드의 목록이다. IANA가 현재 공식 HTTP 상태 코드 레지스트리를 관리하고 있다. 모든 HTTP 응답 코드는 5개의 클래스(분류)로 구분된다. 상태 코

ko.wikipedia.org

HTML 코드를 출력해주는거는 간단하다.

raw.text 을 출력해주기만 하면된다.

 

import requests

URL = 'https://dhlottery.co.kr/gameResult.do?method=byWin'
raw = requests.get(URL)
#print(raw)   #요청 성공 여부
print(raw.text) #HTML 코드 출력

쭉 나오는걸 볼 수 있다.

 

이번엔 당첨번호에 해당 하는 HTML코드를 가져와 보겠다.

 

import requests

URL = 'https://dhlottery.co.kr/gameResult.do?method=byWin'
raw = requests.get(URL)
t = '<div class="nums">'

if t in raw.text:
    idx = raw.text.index(t)
    print(raw.text[idx:idx + 578])

#출력결과

 

정리하기

크롤링 하기 전 생각할 2가지

- 크롤링을 할 웹 사이트 선정

- 데이터 선정

=> 사이트와 적합한 크롤링 방법 고르기 (정적/동적)

라이브러리를 사용하는 이유

- 웹사이트의 HTML 코드를 불러오기 위해

✔ requests 라이브러리 (정적 크롤링 라이브러리)

- get() 함수로 웹 페이지의 내용을 요청

728x90