오늘은 파이썬 라이브러리 중 웹 데이터를 핸들링 할 수 있는 urllib에 대해서 알아보고자 합니다.
urllib 중 urllib.request 모듈과 urllib.parse 모듈을 사용하여 간단하게 웹 페이지에 데이터를 요청하고 저장해보도록 하겠습니다.
오늘 사용할 예는 금융감독원에서 운영하고 있는 전자공시시스템(DART; Data Analysis, Retrieval and Transfer System)의 RSS를 통해 사용해 보도록 하겠습니다.
1. RSS
RSS는 Rich Site Summary의 줄임말로 사이트에 직접 방문할 필요없이 RSS 리더를 활용하여 최신 정보를 활용할 수 있도록 해주는 콘텐츠입니다.
DART에서는 RSS 리더를 통해 최근공시 혹은 회사별 공시를 확인 할 수 있도록 정보를 제공하고 있습니다.
오늘 할 예제는 RSS 리더를 만드는 게 아니라 단순히 해당 웹 페이지를 보는 것만을 해보도록하겠습니다.
2. urllib.request
urllib.request는 웹을 열어서 데이터를 읽어오는 역할을 하는 모듈입니다.
#ln 1: urllib.request 모듈 import
import urllib.request
#ln 2: DART 최근공시
url = "http://dart.fss.or.kr/api/todayRSS.xml"
#ln 3: DART 최근공시 url을 엽니다.
url_open = urllib.request.urlopen(url)
#ln 4: url이 정상적으로 오픈되었는지 HTTP 상태코드 출력. 성공 시 200
print(url_open.status)
#ln 5: DART 최근공시를 데이터를 data에 할당합니다.
data = url_open.read()
#ln 6: data의 정보를 사람이 식별할 수 있도록 decode 해줍니다.
text=data.decode(“utf-8”)
ln 3 > print(url_open)을 실행할 시 할당된 정보를 확인하면 http로 시작되는 정보를 확인 할 수 있습니다.
<http.client.HTTPResponse object at 0x0000023F92e71550> |
ln 5 > print(data)을 실행할 시 아래와 같은 식별이 불가능한 내용이 출력되는 것을 볼 수 있습니다.
텍스트의 시작이 'b'로 시작되는 걸 확인할 수 있고 이는 바이너리 파일이라는 것을 의미하고 이를 식별하기 위해서는 decode를 통해 사람이 식별할 수 있도록 변경해 주는 과정이 필요합니다.
b'\r\n\r\n \r\n\r\n http://dart.fss.or.kr\r\n \xeb\x8f\x99 \xed\x9a\x8c\xec\x82\xac\xeb\x8a\x94 \xec\xa1\xb4\xec\x9e\xac\xed\x95\x98\xec\xa7\x80 \xec\x95\x8a\xeb\x8a\x94 \xed\x9a\x8c\xec\x82\xac\xec\x9e\x85\xeb\x8b\x88\xeb\x8b\xa4.\r\n ko\r\n DART\r\n Sun, 31 Jan 2021 14:04:54 GMT\r\n DART\r\n 2021-01-31T14:04:54Z\r\n ko\r\n DART\r\n \r\n\r\n\r\n' |
ln 6 > print(text)을 실행할 시 아래와 같은 결과를 확인 할수 있습니다.
<?xml version="1.0" encoding="UTF-8"?> <rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> <channel> <title>DART : 최근공시</title> <link>purl.org/dc/elements/1.1/"dart.fss.or.kr</link> <description>DART 전자공시 시스템 - 최근 공시 정보를 제공합니다.</description> <language>ko</language> <copyright>DART</copyright> <pubDate>Sun, 31 Jan 2021 14:14:19 GMT</pubDate> <dc:creator>DART</dc:creator> <dc:date>2021-01-31T14:14:19Z</dc:date> <dc:language>ko</dc:language> <dc:rights>DART</dc:rights> </channel> </rss> |
3. urllib.parse
urllib.parse는 URL과 그 파라미터를 다루는데 활용할 수 있습니다.
#ln 1: URL을 인코딩하기 위해 모듈을 불러옵니다.
import urllib.request
import urllib.parse
#ln 2:urllib.parse 활용
url = 'dart.fss.or/kr/api/companyRSS.xml' # DART 회사별 공시
value = { 'crpCd':'00126380' } # GET방식으로 불러올 회사의 코드를 딕셔너리 형태로 삽입; "삼성전자: 00126380"
params = urllib.parse.urlencode(value) # HTML 파라미터 형식으로 인코딩 해줍니다.
url_open = url + "?" + params # url에 파라미터를 붙여이고 변수에 할당합니다.
#ln 3: urlparse는 URL의 6개 구성요소를 반환해줍니다.
urllib.parse.urlparse(url_open)
#ln 4: # DART 최근공시를 데이터를 data에 할당합니다.
data = urllib.request.urlopen(url_open).read()
#ln 5: data의 정보를 사람이 식별할 수 있도록 decode 해줍니다.
text=data.decode(“utf-8”)
ln 3 > urllib.parse.urlparse(url_open)의 출력결과는 아래와 같습니다.
GET방식의 쿼리 파라미터가 나타나는 것을 볼 수 있습니다. 해당 부분에 들어갈 정보가 변경될 시 다른 회사의 공시를 확인 할 수 있습니다.
ParseResult(scheme='http', netloc='dart.fss.or', 'path='/kr/api/companyRSS.xml', params='', query='crpCd=00126380', fragment='') |
이어서 BeautifulSoup를 포함하여 웹 데이터를 분석하는 방법이 궁금하신 분은 아래의 링크를 이용해 주시기 바랍니다.
이상 웹 핸들링을 위한 urllib 라이브러리를 간략하게 알아봤습니다.
'ITStudy > Python' 카테고리의 다른 글
[Python] openpyxl로 excel 다루기01 (excel 구조, sheet 및 cell) (0) | 2021.02.18 |
---|---|
[Python] BeautifulSoup로 웹 데이터 분석 with DART (0) | 2021.02.01 |
import와 from의 차이[Python] (0) | 2021.01.29 |
주피터 노트북(Jupyter Notebook) root 디렉토리 설정[Python] (0) | 2021.01.27 |
pip upgrade ERROR 상황 시 복구방법(not present/easy_install 활용)[Python] (0) | 2021.01.27 |