오답노트

[requests] 동적 페이지와 동적 페이지에 대한 웹 크롤링 본문

Python/Web Crawling

[requests] 동적 페이지와 동적 페이지에 대한 웹 크롤링

권멋져 2022. 8. 5. 21:22

동적 페이지

동적 페이지는 요즘 많이 쓰고있는 반응형 웹이 동적 페이지이다. 사용자가 버튼을 클릭하거나 상호작용, 이벤트가 발생해도 URL이 바뀌지 않고 바로 페이지 내에서 결과가 나타난다.

 

동적 페이지 웹 크롤링

웹 크롤링은 크게 동적 페이지에 대해서 또는 정적 페이지에 대해서 수행할 수 있다.

하지만 이 둘의 웹 크롤링 방법은 상당히 다르다.

 

동적페이지는 보통 json 형식으로 데이터를 크롤링할 수 있다.

 

리그 오브 레전드 전적 조회 사이트인 op.gg 에서 챔피언 목록을 웹 크롤링 실습을 통해 동적 페이지 웹 크롤링을 알아보자.

 

1. op.gg 챔피언 분석 탭 에 접속한다.

 

2. F12를 눌러 개발자 툴을 키고 가장 상위 탭 중에서 Network를 클릭한다. 그리고 바로 아래 탭에서 Fetch/XHR 탭을 클릭한다.

2.1. 개발자 툴에서 Network탭 그리고 Fetch/XHR 탭

 

3. F5(새로고침)을 눌러 페이지를 갱신하면 아래 op.gg에 요청에 대한 응답 결과들이 표시된다. 그중에서 champions... 를 찾아 클릭한다.

2.2. 롤 챔피언 정보 요청에 대한 응답

4. 옆에 탭에서 우선 Headers 를 살펴보자. 이 Headers는 요청과 응답에 대한 Headers의 내용을 표시한다. 이 중에 General -> Request URL, Request Headers -> referer, user-agent를 사용한다.

 

Request URL은 리그 오브 레전드 챔피언 목록을 요청하기 위한 URL이다.

 

Request Headers 의 referer은 Request URL을 요청한 URL이다.

Request Headers 의 user-agent은 Request URL을 요청한 브라우저이다.

 

Request Headers 없이도 Request URL에 요청해서 응답을 받을 순 있지만, 응답을 받을 수 없다면 꼭 Request Headers를 추가하자.

 

 

2.3. General -> Request URL
2.4. Request Headers -> referer, user-agent

5. 이제 파이썬 코드를 통해 Request Headers을 포함해 Request URL에 요청해보자

requests 패키지 설명은 링크를 참고하자.

 

[requests] Python requests 패키지 설명과 GET, POST

requests 패키지 REST 방식을 사용할 수 있게 해주는 파이썬 패키지이다. 요약하면 URL로 정보를 요청해서 데이터를 받을 수 있다. get() HTTP 메소드 GET을 사용하는 함수다. GET의 특징은 URL에 파라미터

dhjkl123.tistory.com

import requests

headers = {
    "referer": "https://www.op.gg/champions",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
response = requests.get(url,headers = headers)
response.json()['data']


'''
[{'id': 1,
  'key': 'Annie',
  'name': '애니',
  'image_url': 'https://opgg-static.akamaized.net/images/lol/champion/Annie.png',
  ...
'''