[Crawling] - requests 스크랩핑(JSON)

김진수·2020년 12월 2일
0
post-thumbnail

JSON?

경량의 데이터 교환방식입니다. 이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이합니다. 또한 특정 언어에 종속되지 않고 xml를 대체합니다.

requests json

위 코드는 url를 통해 50개의 json데이터를 받아오는 부분입니다. 전에 포스팅한 Session을 통해 url를 가져오는데 https://httpbin.org 사이트를 접속하여 dynamic-data의 stream 부분을 보게 되면 json 데이터를 요청하는 부분을 볼 수 있습니다. steam=True는 text부분을 가져올 때 많이 쓰이는 부분입니다. 데이터를 직렬화해서 가져온다고 보면 됩니다.

위 코드는 수신한 데이터를 text형식으로 출력하는 부분입니다.

위 코드는 encoding형식을 확인하는 코드이며, 만약 encoding 형식이 None이면 encoding형식을 UTF-8형식으로 바꾸는 코드이기도 합니다.

위 코드는 수신한 데이터 r를 iterator한 문자열로 변환하는 iter_lines를 통해 for문을 돌려 line을 출력하고 type도 출력하느 코드입니다.

위 코드는 문자열인 linedmf json.loads를 통해 json방식인 dict형식으로 바꿔 b와 type을 출력하는 코드입니다.

위 코드는 사용한 Session을 반환하는 코드입니다.

위 코드는 https://jsonplaceholder.typicode.com 사이트에서 데이터 한개를 get방식으로 받아오는 코드입니다.


위 코드는 수신한 데이터의 header를 출력하는 코드입니다.

출력한 header정보입니다.

위 코드는 수신한 데이터의 text부분을 출력하는 코드입니다.

출력한 text부분입니다.

첫번째, 수신한 데이터를 json형식으로 변환하는 코드
두번째, json형식을 dict구조이기 때문에 key와 value로 나뉘어져있기에 key부분을 출력하는 코드
세번째, value부분을 출력하는 코드
네번째, 인코딩 형식을 출력하는 코드
다섯번째, 데이터를 바이너리 형식으로 출력하는 코드

전체 코드

import json
import requests

s = requests.Session()

# 100개 json 데이터 요청
r = s.get('https://httpbin.org/stream/50', stream=True)

# 수신 확인
print(r.text)

# Encoding 확인
print('Before Encoding : {}'.format(r.encoding))

if r.encoding is None:
    r.encoding = 'UTF-8'

print('After Encoding : {}'.format(r.encoding))

for line in r.iter_lines(decode_unicode=True):  # iter_lines는 r를 iterator한 문자열로 line마다 출력
    # 라인 출력 후 타입 확인
    print(line)
    print(type(line))

    
    b = json.loads(line) # str -> dict
    print(b)
    print(type(b))


s.close()


r = s.get('https://jsonplaceholder.typicode.com/todos/1')

# header 정보
print(r.headers)

# 본문 정보
print(r.text)



# json 변환
print(r.json()) # 단일 레코드일 경우 호출 가능

# key 반환
print(r.json().keys())

# 값 반환
print(r.json().values())

# 인코딩 반환
print(r.encoding)

# 바이너리 정보
print(r.content)
profile
백엔드 개발자

0개의 댓글