이번 시간에는 아래 세가지를 다뤄보겠다.
1. requests 모듈 사용법 및 장점 - 이전까지는 urllib을 사용했는데 requests 모듈 사용
2. json 데이터 핸들링
3. requests 모듈 테스트 실습
아래는 reqeusts 모듈의 공식 레퍼런스 링크이다.
docs.python-requests.org/en/master/user/advanced/
이전까지는 urllib의 request를 사용했었는데, requests 모듈을 사용하게 되면 좋은 장점들이 여러가지 있다.
쓰레드 처리나 코드 간결성 등등 여러 장점때문에 사용하는데, 이는 구글에서 검색해보면 찾을 수 있다.
그럼 anaconda prompt를 실행 해보자.
section3라는 새로운 프로젝트를 아래 명령어를 통해 만들자.
conda create --name section3 python=3.5
만든 후에는 아래 명령어로 잘 설치가 되었는지 확인 하고
conda info --envs
section3를 활성화 시키자
activate section3
새로 설치를 했으니, requests, beautifulsoup4 모듈을 아래 명령어를 통해 설치하고
pip install requests
pip install beautifulsoup4
아래 명령어를 통해 설치가 잘 되었는지 확인해보자.
conda list
잘 되었으면, atom 명령어를 실행하여 atom 에디터를 실행하자.
이전에 진행했던 section2 폴더와 같은 경로로 section3라는 폴더를 생성 후, atom 에디터에 project에 import시키자
준비가 되었으면 section3 경로에 파이썬 파일을 생성하고 실행시켜보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import sys
import io
import requests
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')
s = requests.Session() #세션이 열림
#PUT(FETCH), DELETE, GET, POST
#r = s.get('https://naver.com') # naver를 get방식으로 가져옴
#print('1', r.text) # 네이버
#r = s.get('http://httpbin.org/cookies', cookies={'from':'myName'}) #cookies라는 변수로 딕셔너리 형태로 요청
#print(r.text)
url = 'http://httpbin.org/get' # http://httpbin.org 는 PUT(FETCH), DELETE, GET, POST 등 http 통신을 테스트 할 수 있는 주
headers = {'user-agent':'myPythonApp_1.0.0'}
#r = s.get(url, headers=headers) #쿠키와 헤더 등 페이로드 형식으로 보내고 받을 수 있다.
#print(r.text)
s.close() #세션 열면 반드시 close 리소스 낭비때문 (자원낭비)
with requests.Session() as s : # with절로 실행 시 자동 close된다.
r = s.get('https://www.naver.com')
print(r.text)
|
cs |
3-2-1.py
위의 주석들을 제거해보고 하나 하나 실행해보면 결과를 확인할 수 있다.
위 사이트는 여러 http 통신 테스트를 진행 할 수 있다. requests모듈을 사용하여 세션을 열었고, 이 주소를 사용해서 get방식으로 쿠키를 전송하여 테스트를 진행했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import sys
import io
import requests
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')
#Response 상태 코드
s = requests.Session()
r = s.get('http://httpbin.org/get')
print(r.status_code) #200
print(r.ok) #True
#https://jsonplaceholder.typicode.com -json 테스트 할 수 있는 사이트
r = s.get('https://jsonplaceholder.typicode.com/albums')
print(r.text)
print(r.json()) #json 형태로 자동으로 컨버팅 해줌
#print(r.json().keys())
#print(r.json().values())
print(r.encoding)
print(r.content)
print(r.raw)
|
cs |
3-2-2.py
https://jsonplaceholder.typicode.com
위 링크는 json 형식 데이터를 전송 테스트 할 수 있는 사이트이다.
마찬가지로 requests 모듈로 세션을 열어 json 값을 받아오는 테스트를 진행했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import sys
import io
import requests, json # json 임포트
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')
#stream 데이터를 json으로 변환 후 그 안에 키값등 출력
s = requests.Session()
r = s.get('http://httpbin.org/stream/20', stream=True) # stream=True 라고 명시적으로 기재하는게 좋음
#print(r.text)
# print(r.json()) # 보기에는 json 이지만 스트림 데이터라 에러가 남
#print(r.encoding)
if r.encoding is None :
r.encoding = 'utf-8'
for line in r.iter_lines(decode_unicode=True) :
#print(line)
b = json.loads(line)
#print(type(b)) #dict 형태
#print(b['origin']) # json으로 딕셔너리 형태가 됬기때문에 키값으로 출력가능
for e in b.keys() :
print("key:",e,"values:",b[e])
|
cs |
3-2-3.py
가장 상단에 json 모듈을 import 시켰고,
http://httpbin.org 사이트에서 stream 데이터를(20건) 가져온 값을 json으로 변환시키는 코드이다.
'언어 > python&웹 크롤링' 카테고리의 다른 글
[python&웹 크롤링] 13. requests 모듈 기초(2) (1) | 2021.01.03 |
---|---|
[python&웹 크롤링] 11. 네이버 금융 정보 가져오기 (0) | 2021.01.01 |
[python&웹 크롤링] 10. BeautifulSoup 사용 및 웹 파싱 기초(2) (0) | 2020.12.28 |
[python&웹 크롤링] 9. BeautifulSoup 사용 및 웹 파싱 기초(1) (0) | 2020.12.18 |
[python&웹 크롤링] 8. youtube 동영상 다운로드 및 mp3 변환 (2) | 2020.12.09 |