책 커버 표지
일경네트워크_2022/09_스크레이핑 입문
  • 저자 : 日経BP社
  • 발행일 : 20220828
  • 페이지수/크기 : 74page/28cm

요약

Nikkei Network_22.9 특집 요약 (p26-39)

스크레이핑 입문
귀찮은 정보 수집을 자동화

취약성 등의 정보를 웹사이트에서 수작업으로 모으는 것은 상당한 수고가 든다. 정기적으로 같은 처리를 수작업으로 반복하는 것은 효율적이지 못하다. 웹사이트에서 필요한 정보만 떼어서(scrape해서) 수집하는 작업을 ‘스크레이핑(scraping)’이라고 한다. Python의 라이브러리를 활용해 스크립트를 만들면 이런 정형 작업을 자동화할 수 있다.

Part 1. 기본
스크립트를 사용해 ‘스크레이핑’

특정의 웹사이트를 정기적으로 체크하고 있는 독자는 많을 것이다. 예를 들면 테크 관련 뉴스 사이트를 열람하는 것은 기술정보의 수집에서는 빠뜨릴 수 없다. 업무에 특화된 정보 수집도 있다. 네트워크 관리자라면 네트워크 기기 등의 취약성 정보를 정기적으로 얻고 있을 것이다.

그러나 취약성 정보는 그렇게 자주 업데이트되는 것은 아니다. 수작업으로 개별 벤더의 웹 사이트에 접속해도 아무런 소득 없이 끝나는 경우가 적지 않다.

따라서 이런 작업은 자동화하는 것이 좋다. 누락 없이, 게다가 빠르게 정보를 수집할 수 있다. 거기서 사용되는 테크닉이, 웹사이트에 게재된 정보에서 필요한 부분만을 취득하는 ‘스크레이핑▼’이다.

-- 자동적으로 정보를 수집 --
스크레이핑 처리에 많이 사용되는 것이 ‘Python(파이썬)’이라고 부르는 스크립트 언어다. 스크립트 언어는 프로그래밍 언어의 일종이다. ‘스크립트’란 텍스트로 쓰여진 절차서를 말한다. 스크립트 언어의 경우, 실행 엔진이 스크립트를 읽고 처리를 실행한다.

예를 들면, 미국 MITRE가 공개하고 있는 CVE▼의 최신정보를 취득하는 것을 생각해 보자. 미국의 날짜가 바뀌기 직전에 그날의 정보를 취득하면 빠짐없이 매일의 정보를 얻을 수 있다.

실제로 액세스하면, MITRE의 웹사이트보다 미국 NIST▼가 운영하고 있는 ‘NVD▼’가 정보를 취득하기 쉬웠다. 비슷한 정보가 있을 경우, 취득하기 쉬운 웹사이트를 선택하는 것도 중요하다. 50줄 정도의 심플한 스크립트로 CVE 번호와 개요를 취득할 수 있었다.

최신정보를 수집하는 예로서, IETF▼에 제출된 최신 드래프트도 수집해 보았다. 이번에는 30행 미만으로 한층 더 심플하다.

다만 ‘정보 취득을 위해서’라고는 하지만 특정 웹사이트에 필요 이상으로 접속하는 행위는 삼가고 싶다. 해당 사이트에 대한 공격이 되기 때문이다. 특히 그 웹사이트를 돌아다니며 정보를 수집하는 ‘크롤링’을 실시하면 액세스가 방대해질 우려가 있다.

-- 인기 스트립트 언어로 실천 --
Python은 스크립트 언어 중에서도 웹사이트에 대한 조작이나 네트워크에 관한 프로그램 부품(라이브러리)이 충실하기 때문에 스크레이핑에서 자주 사용된다. 인공지능 등에서도 널리 사용되고 있다. 최근의 인기 언어이다.

스크립트를 실행하려면 앞서 설명한 실행 엔진을 설치해야 한다. Python에서는 Python 인터프리터가 해당된다. 상세한 것은 Part 2에서 설명한다.

Python 인터프리터를 인스톨하면 ‘커맨드 프롬프트’나 ‘Power Shell’을 열어 커맨드를 입력할 수 있는 상태로 만든다.

여기서 스크립트를 기술한 파일▼을 지정하고, 인터프리터를 기동하는 명령어인 'python' 커맨드를 실행하면 스크립트의 처리가 시작된다.

▼ 스크레이핑
스크레이프(scrape)란 원래 ‘떼어내다’는 뜻이다. 웹사이트에 게재된 정보에서 필요한 부분만 ‘떼어내는’ 것이므로 스크레이핑(scraping)이라고 한다.

▼ CVE
CVE는 Common Vulnerabilities and Exposures의 약자. 정보처리추진기구(IPA)와 JPCERT 코디네이션 센터가 운영하고 있는 JVN(Japan Vulnerability Notes)의 정보도 CVE에 반영되어 있다.

▼ NIST
National Institute of Standards and Technology의 약자. 미국 국립표준기술연구소.

▼ NVD
National Vulnerability Database의 약자. URL은 https://nvd.nist.gov/이다.

▼ IETF
Internet Engineering Task Force의 약자. 인터넷 기술의 표준화 단체.

▼ 스크립트를 기술한 파일
커맨드를 사용해 파일의 내용을 참조하기 위해 스크립트의 두 번째 행에서 문자 코드를 '시프트 JIS'로 설정하고 있다.

Part 2. 준비
Python의 실행 환경을 인스톨

스크레이핑이 기술정보 등의 수집에 도움이 된다는 것을 이해했을 것이다. 이어서 스크레이핑을 시작하는 준비로서 Python의 실행 환경을 설치해 보자.

Part 3. 전체상
지정한 URL에서 타이들을 취득

이제 드디어 스크레이핑 실천에 들어가자. 우선은 기본적인 생각을 정리해 둔다.

Part 4. 수집
2개의 방법으로 웹사이트에 액세스

웹사이트에 접속하는 URL을 만들었다면, 다음 단계는 웹사이트에 접속하는 것이다.

Part 5. 해석
취득한 HTML에서 정보를 추출

마지막 파트에서는 취득한 데이터를 해석하는 방법을 해설한다. 말할 필요도 없이 웹페이지는 HTML로 기술되어 있다. 스크레이핑을 하려면 여기서 어떻게 하면 원하는 정보를 추출할 수 있을지를 생각해야 한다.

 -- 끝 --

Copyright © 2020 [Nikkei Network] / Nikkei Business Publications, Inc. All rights reserved.

목차