본문 바로가기

파이썬 프로그래밍/파이썬 크롤링

[Python] 크롤링 예제. Lv2 Ajax 렌더링 크롤링 풀이

본 게시글은 nomade.kr의 문제를 보고 풀이한 게시글입니다.



문제 주소

https://askdjango.github.io/lv2/



1. 페이지 탐색

크롤링할 페이지 입니다. Lv1과 디자인은 똑같네요



[마우스 오른쪽 클릭] - [페이지 소스보기] 로 건질것이 없는지 찾아봅니다.

블록이 보이시나요? HTML단에서는 안나오네요



이럴땐 개발자 도구모드를 사용합니다. 이렇게 파트의 블록을 보며 따라가줍니다



벌써 찾아버렸네요. 여기 숨어있었습니다.

우리는 여기에 있는 이녀석을 크롤링해 보겠습니다.



먼저 이 페이지의 특징은 html에 보여지지 않고 숨어있기 때문에 이것을 꺼내서 확인해보겠습니다.

우측에 네트워크 탭을 선택하고 새로고침을 누르면 우측 하단처럼 시간초 별로 서버에서 응답하는 목록을 확인할 수 있습니다. 우리는 이 기능을 통해서 실습해볼겁니다.



무슨 서버가 무슨 파일들로 응답을 해줬는지 확인을 하던중 data.json파일에 목록들이 나오는 것을 발견하였습니다.

그럼 우린 이부분을 크롤링 하면 되겠죠?



헤더부분을 보시면 응답 URL을 저렇게 보내주는것을 확인할 수 있습니다.

이 파일을 받아와서 크롤링 해보겠습니다.



2. json파일 받아오기

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
import json
 
#json header에 있는 json url 주소
json_url = 'https://askdjango.github.io/lv2/data.json'
 
#받아온 json을 텍스트로 변환
json_string = requests.get(json_url).text
 
#json모듈을 사용해서 로드
data_list = json.loads(json_string)
 
print(data_list)

cs


실행

json파일 불러와서 출력 성공!


그 다음으로 여기서 원하는 부분만 골라서 출력해 보겠습니다.


3. 원하는 부분 골라내기

1
2
3
4
5
6
7
8
9
import requests
import json
 
json_url = 'https://askdjango.github.io/lv2/data.json'
json_string = requests.get(json_url).text
data_list = json.loads(json_string)
 
for data in data_list:
    print(data['name'], data['url'])
cs

8,9번째줄 추가입니다.

data_list에 데이터들이 차곡차곡 쌓이는것을 방금전 print문을 통해 확인하셨을 겁니다.

반복문을 사용해서 data_list(전체)만큼 반복문을 돌며 name, url을 한번씩 출력할 코드입니다.


성공했습니다.

1
2
3
for data in data_list:
    print(data['name'], data['url'])
    print('{name} {url}'.format(**data))
cs

3번째 줄처럼 출력해도 결과는 똑같으니 print는 기호에 따라 사용하시면 되겠습니다.