Requests & Beautifulsoup4

huijiny·2021년 2월 15일
1

python

목록 보기
1/1

python을 통해 api를 사용하고, 또 크롤링 하는 방법을 배워보도록 한다.

먼저 가장 필요한 두 라이브러리는 requests, besutifulsoup4이다.

??? : 그럼 requests 와 beautifulsoup4는 무엇인가요?

requests

공식문서는 여기를 참고하세요.

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}')
  1. request pprint를 추가한다. 여기서 pprint는 받아온 json 데이터를 예쁘게 콘솔에 나타나게 해주는 라이브러리.

  2. 각자 발급받은 key와 필요한 파라메터들을 따로 적어주고,

  3. url을 구성한다. 이곳에서 fstring을 사용하면 string을 간단한 방법으로 변수와 함께 사용이 가능하다.

  4. Requests.get(url)을 통해 받아온 데이터를 .json() 메소드를 사용해 json 형태로 만들어주며 이를 response에 저장한다.

  5. 이 때 불러온 response의 생김새는 이렇다. 5개를 불러오지만 편의를 위해 광진구 한 개만 나타내도록 하겠다.

  6. {'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'}}}
  7. 여기서 광진구에 접근하기 위해서는 response['response']['body']['items'][0]['stationName'] 이 코드가 필요하며, 미세먼지 농도에 접근하기 위해서는 response['response']['body']['items'][0]['pm10Value'] 이 코드가 사용된다.

  8. 각 값을 변수에 저장하고, 마지막으로 fstring 방법을 사용해 변수와 함께 프린트한다.

beautifulsoup4

공식문서는 여기 를 참고하세요.

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)
  1. 라이브러리를 import한다.
  2. url을 저장한다.
  3. 이번엔, json 형식이 아닌 html 형식을 가져오는 것이기 때문에, .text를 사용해 가져온 데이터에서 텍스트 형식으로 가져온다. 이를 response에 저장한다.
  4. BeautifulSoup을 이용해 response에 저장된 텍스트 데이터를 html 파서를 통해 파싱한다. 그리고 그 데이터를 data 변수에 저장한다.
  5. data 변수에 있는 html 텍스트에서 '#exchangeList > li.on > a.head.usd > div > span.value' 태그를 각각 타고 들어가서 맨 앞에 있는 첫 값만을 가져오는 코드이다. 이 곳에서는 BeautifulSoup의 메소드인 .selet_one(selector)를 사용한다. 그리고 그 안에있는 값을 text화 시킨다.
  6. 값을 출력한다.

참고

request가 아니라 requests 이다.

느낀점

  • 공식문서 좀 읽어라(제발제바렞러미ㅏㅓㄹㅁ쟈덜)
  • 블로그 의지하지마라
  • 나야말로 블로그 좀 써라(? 모순)
  • 이 글을 블로그에 올릴까?
  • 싸피 빡셈
profile
Chocolate lover🍫 & Junior Android developer🤖

0개의 댓글