python을 통해 api를 사용하고, 또 크롤링 하는 방법을 배워보도록 한다.
먼저 가장 필요한 두 라이브러리는 requests, besutifulsoup4이다.
??? : 그럼 requests 와 beautifulsoup4는 무엇인가요?
공식문서는 여기를 참고하세요.
python에서 가장 많이 쓰는 저명한 라이브러리로 소개 받았다. 그만큼 많이 쓰이며, pip install을 통해 설치 가능하다.
$ pip install requests
get(url)을 통해서 데이터를 받아오는 것이 가능하며, 이는 .json()이나 .text 등의 메소드들로 원하는 형태로 변경이 가능하다. 코드를 보며 한 줄씩 설명을 해보려고 한다!
공공데이터 포털에서 미세먼지를 받아오는 파이썬 코드는 아래와 같다.
import requests
from pprint import pprint
key = //개인 key 발급
return_type = 'json'
num_of_rows = '5'
page_no = '1'
sido_name = '서울'
ver = '1.0'
url = f'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?serviceKey={key}&returnType={return_type}&numOfRows={num_of_rows}&pageNo={page_no}&sidoName={sido_name}&ver={ver}'
response = requests.get(url).json()
# pprint(response)
# siidoName의 미세먼지 농도는 pm10value
gu = response['response']['body']['items'][0]['stationName']
pm10Value = response['response']['body']['items'][0]['pm10Value']
print(f'{sido_name} {gu} 의 미세먼지 농도는 {pm10Value}')
request
와 pprint
를 추가한다. 여기서 pprint는 받아온 json 데이터를 예쁘게 콘솔에 나타나게 해주는 라이브러리.
각자 발급받은 key와 필요한 파라메터들을 따로 적어주고,
url을 구성한다. 이곳에서 fstring을 사용하면 string을 간단한 방법으로 변수와 함께 사용이 가능하다.
Requests.get(url)
을 통해 받아온 데이터를 .json()
메소드를 사용해 json 형태로 만들어주며 이를 response에 저장한다.
이 때 불러온 response의 생김새는 이렇다. 5개를 불러오지만 편의를 위해 광진구 한 개만 나타내도록 하겠다.
{'response': {'body': {'items': [{'coFlag': None,
'coGrade': '1',
'coValue': '0.7',
'dataTime': '2021-01-14 15:00',
'khaiGrade': '2',
'khaiValue': '85',
'no2Flag': None,
'no2Grade': '1',
'no2Value': '0.025',
'o3Flag': None,
'o3Grade': '1',
'o3Value': '0.018',
'pm10Flag': None,
'pm10Grade': '2',
'pm10Value': '53',
'pm25Flag': None,
'pm25Grade': '2',
'pm25Value': '23',
'sidoName': '서울',
'so2Flag': None,
'so2Grade': '1',
'so2Value': '0.002',
'stationName': '광진구'}
],
'numOfRows': 5,
'pageNo': 1,
'totalCount': 40},
'header': {'resultCode': '00', 'resultMsg': 'NORMAL_CODE'}}}
여기서 광진구에 접근하기 위해서는 response['response']['body']['items'][0]['stationName']
이 코드가 필요하며, 미세먼지 농도에 접근하기 위해서는 response['response']['body']['items'][0]['pm10Value']
이 코드가 사용된다.
각 값을 변수에 저장하고, 마지막으로 fstring 방법을 사용해 변수와 함께 프린트한다.
공식문서는 여기 를 참고하세요.
python으로 크롤링을 하기 위해서는 꼭 이 라이브러리가 필요하다. 이 또한 pip를 통해 간단하게 설치가 가능하다.
$ pip install beautifulsoup4
requests 라이브러리와 함께 자주 쓰이며, 'html.parser'등의 다양한 파서 기능을 통해 받아온 데이터를 파싱할 수 있다.
이 라이브러리와 위에서 배운 requests를 통해 값을 크롤링 해와본다.
import requests
from bs4 import BeautifulSoup
url = 'https://finance.naver.com/marketindex/'
response = requests.get(url).text
data = BeautifulSoup(response, 'html.parser')
result = data.select_one('#exchangeList > li.on > a.head.usd > div > span.value').text
print(result)
import
한다.url
을 저장한다. json
형식이 아닌 html
형식을 가져오는 것이기 때문에, .text
를 사용해 가져온 데이터에서 텍스트 형식으로 가져온다. 이를 response에 저장한다.BeautifulSoup
을 이용해 response
에 저장된 텍스트 데이터를 html
파서를 통해 파싱한다. 그리고 그 데이터를 data 변수에 저장한다.'#exchangeList > li.on > a.head.usd > div > span.value'
태그를 각각 타고 들어가서 맨 앞에 있는 첫 값만을 가져오는 코드이다. 이 곳에서는 BeautifulSoup
의 메소드인 .selet_one(selector)
를 사용한다. 그리고 그 안에있는 값을 text화 시킨다.request가 아니라 requests 이다.