1. 공공데이터 api 요청

2. 데이터를 params or data(Dictionary)형태로 보냄
1) get 방식, 
import requests
resp = requests.request("get", "http://httpbin.org/get", params={"key":"value"})

2) post 방식
import requests
resp = requests.request("post", "http://httpbin.org/post", data={"key":"value2"})


3. JSON
1) json 형태로 바꾸는 방법
import json
result = json.loads(resp.content)

2) 특정 값 뽑아오는 방

3) 다운로드 함수
- resp.raise_for_status() 를 사용해야 오류가 났을 때 except이 발생한다.
import requests

header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

def download(url, params={}, retries=3):
    resp = None
    
    try:
        resp = requests.get(url, params=params, headers=header)
        resp.raise_for_status()
    except requests.exceptions.HTTPError as e:
        if 500 <= e.response.status_code < 600 and retries > 0:
            print(retries)
            resp = download(url, params, retries-1)            
        else:
            print(e.response.status_code)
            print(e.response.reason)
            print(e.request.headers)            
    return resp

4. 공공데이터포털 API 사용하기
- 키 값이 두번 quote되기 때문에 한번 unquote해서 넘기기
url = "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty"
params = {
"serviceKey":"u1rFHz3u6gdgSXAKSNbTm7jGXSXM1Tcs2CgDniQaahCajzFoFqvXk5UMdf1if9d0mbR8Lje%2FC0PLOygux%2BzqXQ%3D%3D",    
"numOfRows":"5",
"pageNo":"1",
"stationName":"종로구",
"dataTerm":"DAILY",
"ver":"1.3",
}

params['serviceKey'] = requests.utils.unquote(params['serviceKey'])
html = download(url, params)
html.text


5. 응용
- post 방식에서는 form-data 형태로 보내면 결과를 얻을 수 있다.

1) post형태의 downloads함수
- params가 data로 바뀌고 get이 post로 바뀌었다.
import requests

def download2(url, params={}, retries=3):
    header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
    resp = None
    
    try:
        resp = requests.post(url, data=params, headers=header)
        resp.raise_for_status()
    except requests.exceptions.HTTPError as e:
        if 500 <= e.response.status_code < 600 and retries > 0:
            print(retries)
            resp = download(url, params, retries-1)            
        else:
            print(e.response.status_code)
            print(e.response.reason)
            print(e.request.headers)            
    return resp

2) 결과
[input]
url = "http://pythonscraping.com/pages/files/processing.php"
params = {"firstname":"sion", "lastname":"test"}
result_form = download2(url, params)
print(result_form.text)
print(result_form.request.body)

[output]

Hello there, sion test!

firstname=sion&lastname=test

 

1. 공공데이터 api 요청 

2. 데이터를 params or data(Dictionary)형태로 보냄 
1) get 방식,  
import requests 
resp = requests.request("get", "http://httpbin.org/get", params={"key":"value"}) 

2) post 방식 
import requests 
resp = requests.request("post", "http://httpbin.org/post", data={"key":"value2"}) 


3. JSON 
1) json 형태로 바꾸는 방법 
import json 
result = json.loads(resp.content) 

2) 특정 값 뽑아오는 방 

3) 다운로드 함수 
- resp.raise_for_status() 를 사용해야 오류가 났을 때 except이 발생한다. 
import requests 

header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'} 

def download(url, params={}, retries=3): 
    resp = None 
     
    try: 
        resp = requests.get(url, params=params, headers=header) 
        resp.raise_for_status() 
    except requests.exceptions.HTTPError as e: 
        if 500 <= e.response.status_code < 600 and retries > 0: 
            print(retries) 
            resp = download(url, params, retries-1)             
        else: 
            print(e.response.status_code) 
            print(e.response.reason) 
            print(e.request.headers)             
    return resp 

4. 공공데이터포털 API 사용하기 
- 키 값이 두번 quote되기 때문에 한번 unquote해서 넘기기 
url = "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty
params = { 
"serviceKey":"u1rFHz3u6gdgSXAKSNbTm7jGXSXM1Tcs2CgDniQaahCajzFoFqvXk5UMdf1if9d0mbR8Lje%2FC0PLOygux%2BzqXQ%3D%3D",     
"numOfRows":"5", 
"pageNo":"1", 
"stationName":"종로구", 
"dataTerm":"DAILY", 
"ver":"1.3", 


params['serviceKey'] = requests.utils.unquote(params['serviceKey']) 
html = download(url, params) 
html.text 

4. 쿠키
1) 쿠키 로그인
- 쿠키도 dictionay형태로 넘기면 된다.
[input]
url = "http://pythonscraping.com/pages/cookies/welcome.php"
params = {"username":"1234", "password":"password"}
result = requests.get(url, cookies={'loggedin': '1', 'username': '1234'})
result.text

[output]
'\n

Welcome to the Website!

\nYou have logged in successfully! 
profile.php">Check out your profile!'

 

2) Session

-  쿠키로 데이터를 포함시킨 후 아래를 호출하면 Session으로 쿠키가 저장된다.

session = requests.Session()
html = session.post(url)
print(html.request.body)

print(html.text)

3) 네이버 로그인 힌트
#네이버 로그인 힌트
#md5 => rsa => 공개키 => 등등등, 리다이렉션을 멈추고 작업을 한다. javascript에서 암호화 하는 부분을 찾아서 


5. 응용 
- post 방식에서는 form-data 형태로 보내면 결과를 얻을 수 있다. 

1) post형태의 downloads함수 
- params가 data로 바뀌고 get이 post로 바뀌었다. 
import requests 

def download2(url, params={}, retries=3): 
    header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'} 
    resp = None 
     
    try: 
        resp = requests.post(url, data=params, headers=header) 
        resp.raise_for_status() 
    except requests.exceptions.HTTPError as e: 
        if 500 <= e.response.status_code < 600 and retries > 0: 
            print(retries) 
            resp = download(url, params, retries-1)             
        else: 
            print(e.response.status_code) 
            print(e.response.reason) 
            print(e.request.headers)             
    return resp 

2) 결과 
[input] 
url = "http://pythonscraping.com/pages/files/processing.php
params = {"firstname":"sion", "lastname":"test"} 
result_form = download2(url, params) 
print(result_form.text) 
print(result_form.request.body)

[output] 

Hello there, sion test!

firstname=sion&lastname=test


3) 교보문고 데이터 가져오기
import requests

url = "http://www.kyobobook.co.kr/search/SearchCommonMain.jsp"
param = {
    "vPstrCategory": "TOT",
    "vPstrKeyWord": "abc",
    "vPplace": "top"
}
result = requests.post(url,data=param)
result.text

4) 네트워크에서 post 데이터 찾기

- Query String Parameters 또는 Form Data를 파라미터로 보내주면 된다

'데이터 분석가 역량' 카테고리의 다른 글

day 4] BeautifulSoup  (0) 2019.05.03
day 4] DOM  (0) 2019.05.02
Day 2] Reqeusts  (0) 2019.04.30
Day 2] Crawling  (0) 2019.04.30
Day - 1  (0) 2019.04.29

+ Recent posts