목차
미세먼지(PM10, PM25) 정보 가져오기
앞서 포스트에서 미세먼지 정보를 공공 데이터 포털에서 API를 사용해서 가져오는 방법에 대해 알아보았습니다. (https://scribblinganything.tistory.com/530) 상세 내용은 링크를 통해 확인하시면 됩니다.
결과는 아래와 같이 나왔습니다. 이번 포스트는 아래 결과를 사용해서 파이썬에서 제공하는 정규표현 함수 re 함수를 사용해서 원하는 결과를 가져오는 방법에 대해 알아보겠습니다.
미세먼지 결과>>
<?xml version="1.0" encoding="UTF-8"?>
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL_CODE</resultMsg>
</header>
<body>
<items>
<item>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>72</khaiValue>
<so2Value>0.003</so2Value>
<coValue>0.4</coValue>
<pm25Flag/>
<pm10Flag/>
<o3Grade>2</o3Grade>
<pm10Value>27</pm10Value>
<khaiGrade>2</khaiGrade>
<pm25Value>24</pm25Value>
<sidoName>서울</sidoName>
<no2Flag/>
<no2Grade>1</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<dataTime>2022-05-30 08:00</dataTime>
<coGrade>1</coGrade>
<no2Value>0.019</no2Value>
<stationName>중구</stationName>
<pm10Grade>1</pm10Grade>
<o3Value>0.040</o3Value>
</item>
#####생략#####
</items>
<numOfRows>100</numOfRows>
<pageNo>1</pageNo>
<totalCount>40</totalCount>
</body>
</response>
정규표현라이브러리 RE 기본 사용법(REGEX) : . + ^ $ ()
이번에는 정규 표현에서 가장 많이 사용하는 기호에 대해 알아보겠습니다. 제가 주로 사용하는 기호는 위의 목차 제목과 같이 . + ^ $ ( ) 가 있습니다.
해당 문자의 기능은 아래와 같습니다.
- Period 마침표 . : 하나의 어떠한 문자를 의미함
- Plus sign 더하기 + : 앞의 문자가 1 이상 있을 수 있음
- Circumflex 삿갓 ^ : 문자의 시작
- Dollar sing 달러 $ : 문자의 끝
- 소괄호 () : 내부 조건만을 출력으로 보냄
아래 예제를 통해 마침표와 더하기 특수문자 사용법을 쉽게 이해해보겠습니다.
예제코드>>
import requests
import re
dust = requests.get("API키값")
dust.raise_for_status()
print("reponse : ", dust.status_code)
with open("dust_info.html", "w", encoding="utf8") as f:
f.write(dust.text)
filtered_data = re.findall(r"<stationName>.+</stationName>", dust.text)
print(filtered_data)
4~10번 라인: 앞서 포스트 스크롤링(Scrawling)에서 사용 방법에 대해 알아보았습니다.
12번 라인: findall 함수를 사용해서 검색 필터(Filter)에 일치하는 값을 모두 찾습니다. .+ 를 사용해서 사이에 들어가는 모든 문자를 검색합니다.
결과>>
결과는 아래와 같이 리스트(list)로 출력 됩니다.
reponse : 200
['<stationName>중구</stationName>', '<stationName>한강대로</stationName>', '<stationName>종로구</stationName>', '<stationName>청계천로</stationName>', '<stationName>종로</stationName>', '<stationName>용산구</stationName>', '<stationName>광진구</stationName>', '<stationName>성동구</stationName>', '<stationName>강변북로</stationName>', '<stationName>중랑구</stationName>', '<stationName>동대문구</stationName>', '<stationName>홍릉로</stationName>', '<stationName>성북구</stationName>', '<stationName>정릉로</stationName>', '<stationName>도봉구</stationName>', '<stationName>은평구</stationName>', '<stationName>서대문구</stationName>', '<stationName>마포구</stationName>', '<stationName>신촌로</stationName>', '<stationName>강서구</stationName>', '<stationName>공항대로</stationName>', '<stationName>구로구</stationName>', '<stationName>영등포구</stationName>', '<stationName>영등포로</stationName>', '<stationName>동작구</stationName>', '<stationName>동작대로 중앙차로</stationName>', '<stationName>관악구</stationName>', '<stationName>도
산대로</stationName>', '<stationName>강남대로</stationName>', '<stationName>송파구</stationName>', '<stationName>강동구</stationName>', '<stationName>천호대로</stationName>', '<stationName>금천구</stationName>', '<stationName>시흥대로</stationName>', '<stationName>강북구</stationName>', '<stationName>양천구</stationName>', '<stationName>노원구</stationName>', '<stationName>화랑로</stationName>', '<stationName>강
남구</stationName>', '<stationName>서초구</stationName>']
앞서 예제는 마침표 점과 더하기 기호로 검색하는 방법에 대해 알아보았습니다. 이번에는 괄호 기호를 사용해서 원하는 결과를 출력 해보겠습니다.
예제 코드>>
import requests
import re
dust = requests.get("API키값")
dust.raise_for_status()
print("reponse : ", dust.status_code)
with open("dust_info.html", "w", encoding="utf8") as f:
f.write(dust.text)
filtered_data = re.findall(r"<stationName>(.+)</stationName>", dust.text)
print(filtered_data)
12번 라인: 앞서 코드와 동일 하고 12번 라인 코드에 () 소괄호만 추가 되었습니다. 괄호를 사용해서 괄호 안의 값만을 출력으로 가져 옵니다.
결과>>
reponse : 200
['중구', '한강대로', '종로구', '청계천로', '종로', '용산구', '광진구', '성동구', '강변북로', '중랑구', '동대문구', '홍릉로', '성북구', '정릉로', '도봉구', '은평구', '서대문구', '마포구', '신촌로', '강서구', '공항대로', '구로구', '영등포구', '영등포로', '동작구', '동작대로 중앙차로', '관악구', '강남구', '서초구', '도산대로', '강남대로', '송파구', '강동구', '천호대로', '금천구', '시흥대로', '강북구', '양천구', '노
원구', '화랑로']
삿갓과 달라 표시의 특수 기호는 문자열 검색에 사용되어서 미세먼지데이터를 XML 문서로 가져오면 모든 내용은 <> 괄호에 쌓여 있어서 사용이 어렵습니다.
'파이썬(Python) > 웹스크롤링' 카테고리의 다른 글
[Python] Request Post Get 함수 사용법 및 예제 실습 (0) | 2022.06.20 |
---|---|
[Python] 공공데이터포털에서 미세먼지 데이터 가져오기(크롤링, fine dust, API, 파이썬) (0) | 2022.05.24 |
[Python]Selenium BluetoothAvailability()에러 해결 방법 (usb_device_handle_win) (0) | 2022.01.24 |
[Python] 네이버 금융 주식 정보 가져오기 (ex. 삼성전자) (0) | 2021.11.09 |
[Python] yfinance로 고점대비 하락율 그래프 그리기 (코스피, 코스닥, MDD) (0) | 2021.11.08 |