◆ 크롤링 대상 사이트 살펴보기
크롤링을 할 때는 꼭 해당 웹 사이트를 살펴봐야한다.
바로 정적 크롤링 / 동적 크롤링 중 어떤 것이 적합할지 정해야 하기 때문이다.
로또 당첨 번호의 경우는 어떨까?
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() 함수로 웹 페이지의 내용을 요청
'[python] > 웹 크롤링' 카테고리의 다른 글
[웹 크롤링] 8. 정적크롤링(3) (0) | 2022.05.22 |
---|---|
[웹 크롤링] 7. 정적 크롤링(2) (0) | 2022.05.20 |
[웹 크롤링] 5. 선택자 (0) | 2022.05.12 |
[웹 크롤링] 4. HTML 구조 (0) | 2022.05.09 |
[웹 크롤링] 3 . 라이브러리와 크롤링 준비 (0) | 2022.05.08 |