14. 웹스크래핑
1. 웹의이해 2. HTML 데이터다루기 3. 정규표현식 4. Lab: 웹스크래핑실습
01 웹의이해
01. 웹의이해 웹의개념 월드와이드웹 (World Wide Web) 은인터넷에연결된컴퓨터를이용하여사람들과정보를공유할수있도록거미줄처럼엮인공간이다. 월드와이드웹을줄여웹 (web) 이라고한다.
01. 웹의이해 웹컴포넌트 : HTML 과 HTTP : HTML HTML(Hyper Text Markup Language) 은웹상의정보를구조적으로표현하기위한언어이다. [HTML 의예 ]
01. 웹의이해 웹컴포넌트 : HTML 과 HTTP : HTML 태그 (tag) 는꺾쇠괄호 < > 로둘러싸여있고, 그안에정보에대한의미를적는다. 그리고 그의미가끝나는부분에슬래시 (/ ) 를사용하여해당태그를종료한다.
01. 웹의이해 웹컴포넌트 : HTML 과 HTTP : HTTP HTTP(Hypertext Transaction Protocol) 는인터넷에서컴퓨터간에정보를주고받을때사용하는일종의약속을말하며, 일반적으로컴퓨터과학에서는이러한약속을프로토콜 (protocol) 이라고한다.
01. 웹의이해 웹의동작순서 웹에있는정보를보기위해먼저하는일은웹브라우저를시작하고, 거기에주소정보를입 력하는것이다. 주소정보의공식이름은 URL(Uniform Resource Locator) 이라고한다. [URL 의구조 ] URL에는해당서버가위치한인터넷주소정보인도메인네임 (domain name) 이있다. 흔히도메인정보또는서버주소라고도하는이주소를통해웹의정보를제공하는서버에접속한다. 일반적으로컴퓨터는인터넷프로토콜주소 (Internet Protocol address), 즉 IP 주소 (IP address) 라고부르는주소값을가진다. IP 주소를컴퓨터의주소로생각하면이주소에접속하기위해사용하는도메인네임과연결하기위한도메인네임서버 (Domain Name Server, DNS) 가운영된다.
01. 웹의이해 웹의동작순서 [ 웹의동작순서 ]
01. 웹의이해 웹스크래핑 모든웹은 HTML 로구성되어있으므로, HTML 의규칙을파악한다면얼마든지 HTML 에서필요 한정보를가져올수있다. 이러한과정을일반적으로웹스크래핑 (web scrapping) 이라고한다.
01. 웹의이해 엑셀에서웹의정보가져오기 꼭파이썬을사용하지않더라도엑셀에서간단하게웹의정보를가져올수있다. 먼저엑셀을실행하 여 [ 데이터 ] - [ 웹 ] 메뉴를선택한다. 대화상자가열리면추출하고싶은데이터가있는웹주소를입력 한다. 추출하고자하는테이블을선택하면데이터가출력되어엑셀에기록되는것을확인할수있다. [ 엑셀을사용한웹데이터추출방법 ]
02 HTML 데이터다루기
02. HTML 데이터다루기 웹에서데이터다운로드하기
02. HTML 데이터다루기 HTML 파싱 웹페이지의 HTML 을분석하여필요한 URL 을추출하는작업이 HTML 파싱이다. 파싱 (parsing) 은특정텍스트를분석하여그데이터로부터필요한정보를추출하는과정이다. [URL 정보의표현방법 ]
02. HTML 데이터다루기 HTML 파싱 다음으로웹페이지에서필요한정보만추출하는방법은무엇일까? 아래의테이블에서필 요한주식정보를어떻게가져올수있을까? [ 주식정보테이블 ] 가장좋은방법은테이블을구성하는 HTML 페이지를찾아그정보를가져오는것이다. 먼저해당웹페이지를열고마우스오른쪽버튼을누른후, 페이지소스보기 를클릭한다. 웹페이지의정보가있는 HTML 코드를확인할수있다. 이코드를분석하여원하는정보만따로추출할수있는데, 이를위해해당정보를표현하는코드의패턴을찾아 HTML 생성규칙을파악하고, 이를추출하는프로그램을만들어야한다.
02. HTML 데이터다루기 HTML 파싱 테이블정보가크게는 <dl>~</dl> 클래스사이의코드안에있고, 각각의개별정보는 <dd>~</dd> 태그사이에있는것을알수있다. 이두가지정보만안다면, 이패턴으로부터원하는주식데이터를쉽게추출할수있다. [ 주식정보 HTML 구조 ]
03 정규표현식
03. 정규표현식 정규표현식의개념 정규표현식 (regular expression) 은일종의문자를표현하는공식으로, 특정규칙이있는문 자열집합을추출할때자주사용하는기법이다 [ 일반문자와정규표현식의연결 ]
03. 정규표현식 정규표현식스스로연습하기 정규표현식은문법자체가매우방대하므로이책에서전부다룰수는없다. 학습자가스스로찾아공부하는것이매우중요하며, 필요한것이있을때마다인터넷을검색하며확인하는노력이필요하다. 정규표현식을연습하기위한다양한방법이있는데, 가장좋은방법중하나는웹에서제공하는정규표현식연습장을사용하는것이다. 정규표현식연습장웹사이트 (http://www.regexr.com) 에접속하면아래쪽에는텍스트가, 위쪽에는정규표현식을넣을수있는구조로설계되어있다. 여기에파싱할텍스트와정규표현식을넣고실험해보도록한다.
03. 정규표현식 정규표현식문법 정규표현식을배우기위해기본으로알아야하는개념은메타문자 (meta-characters) 이다. 메타문자는문자를설명하기위한문자로, 문자의구성을설명하기위해원래의의미가아니라다른의미로쓰이는문자를뜻한다.
03. 정규표현식 정규표현식문법 : 기본메타문자 [] 먼저대괄호 [ ] 는 [ 와 ] 사이의문자와매칭하라는뜻으로사용된다. 예를들어, [abc] 는어떤텍스트에 a 또는 b 또는 c라는텍스트가있는지찾으라는뜻이다. [ ] 에는 or의의미가있다. 예를들어, 비틀스의노래가사중 yesterday 또는 Yesterday 라는단어를한번에찾으려면 [Yy]esterday라고입력하면한번에정규표현식으로검색할수있다. 만약 [abc] 라는정규표현식을쓴다면다음과같은텍스트에서검색되는텍스트는어떤것이있을까? 여기서는 a 의 a, before 의 b와같은방식으로검색될것이다. 알파벳전체나한글전체텍스트를찾고싶다면어떻게하면될까? 바로 - 을사용한다. [A-Zaz] 나 [ 가 - 힝 ] 과같은기호로문자열에서알파벳과한글을추출할수있다. 숫자전체를추출한 다면 [0-9] 로쓸수있다.
03. 정규표현식 정규표현식문법 : 반복관련메타문자 -, +, *,?, { } 앞에서배운 [ ] 는매우유용하지만, 한번에여러개의글자를표현할수없다. 예를들어, 휴대전화번호를찾고싶다면다음과같이정규표현식을작성해야한다. 하지만이렇게하면몇가지문제점이있다. 먼저텍스트를너무많이적는다. 이럴때쓸수 있는메타문자가 + 이다. + 는해당글자가 1 개이상출현하는것을뜻한다.
03. 정규표현식 정규표현식문법 : 반복관련메타문자 -, +, *,?, { } 출현횟수를조정해야할때사용하는메타문자는중괄호 {} 이다. 예를들어, [a-za-z]{3,4} 이면알파벳이 3자부터 4자까지출현할수있다는뜻이다. 반복횟수는 {1,}, {0,}, {1,3} 처럼시작값이나끝값은지정하지않고오픈할수있다. 만약 {1,} 라고쓴다면한번이상출현해야한다는제약이있다. * 는 + 와달리해당글자가 0 번부터무한대까지반복할수있다. { } 를사용하여표현한다면 + 는 {1,} 이고 * 는 {0,} 을뜻한다. 예를들어, tomor*ow 라고표현하면이정규표현식에해당 하는글자는무엇일까?
03. 정규표현식 정규표현식문법 : 그외메타문자 (),.,, ^, $, \ 메타문자 ( ) 는묶음을표시하는것으로, 좀더쉽게메타문자의묶음을표시하는역할을한다. [.] 와 (.) 의뜻이다른데, [.] 는일반적인마침표를뜻하고 (.) 는줄바꿈기호를제외한전체문자를뜻한다. 만약다음과같은자막데이터에서시간정보를없애고싶다면어떻게해야할까? 메타문자 나 ^ 은 or 와 not 의의미로많이사용한다. 정규표현식의처음과끝에는메타문자 ^ 과 $ 를주로붙인다.
03. 정규표현식 정규표현식연습 정규표현식을연습해보자. 먼저구글에서제공하는미국특허정보데이터세트홈페이지 에접속한다.
03. 정규표현식 정규표현식연습
03. 정규표현식 정규표현식연습 href 태그가보일것이다. 이태그는링크 (link) 태그로, 해당주소를웹브라우저에넣으면파일을다운로드할수있다. 이제 zip 파일을다운로드하기위해정규표현식을이용해글자들을추출할것이다. 정규표현식연습장 (http://www.regexr.com) 을열어모든 html 소스를연습장에붙여넣는다. 다음으로상단에정규표현식을기재한다. 정규표현식을생각해보면시작은 http 끝은 zip 으로끝나는것을알수있다. 중간에는매우다양한글자가나온다. 따라서이문서에서는 (http)(.+)(zip) 이라고입력하면, 해당링크들의정규표현식을찾을수있다.
03. 정규표현식 정규표현식연습 [ 정규표현식연습장에서정규표현식찾기 ]
04 Lab: 웹스크래핑실습
04. Lab: 웹스크래핑실습 아이디추출하기 먼저특정아이디를추출하는 Lab 이다. 다음웹사이트에는이벤트당첨자의아이디를발표 한웹페이지가있는데, 이웹페이지에서필요한아이디만추출해보겠다. [ 이벤트당첨자정보 ]
04. Lab: 웹스크래핑실습 아이디추출하기
04. Lab: 웹스크래핑실습 아이디추출하기 위코드를보면먼저 4행에서접속할웹페이지의링크를작성하고 5행에서웹페이지에접속한후, 6행에서해당웹페이지의 HTML 코드를문자열로가져온다. 다음으로해당 HTML 코드를 7행에서 findall( ) 함수를사용하여정규표현식패턴을넣어주면패턴대로데이터를찾아서 id_results 변수에넣어준다. 해당변수는튜플형태로반환되기때문에각각을출력하기위해서는 10행과같이 for문을사용한다.
04. Lab: 웹스크래핑실습 HTML 파싱 주식데이터에서해당부분을파싱하는코드를작성하겠다. [HTML 파싱을위한데이터 ]
04. Lab: 웹스크래핑실습 HTML 파싱 코드는크게두가지부분으로구성된다. ~ 에정보가있음 ~ 정보를추출
04. Lab: 웹스크래핑실습 HTML 파싱
04. Lab: 웹스크래핑실습 HTML 파싱 코드는이전과동일하게 URL에접속하여 HTML 코드를추출한다. 다음으로 9~11행에서정규표현식을사용하여첫번째 HTML을추출한다. 해당패턴을가진 HTML 코드는총 2개가있기때문에그중첫번째튜플값을 10행에서선택한다. 앞서마찬가지로 ( ) 를사용해정규표현식을작성했기때문에, 각정규표현식이튜플로묶이게되고그중두번째값에주식정보가포함되어있다. 그러므로 11행에서 samsung_stock[1] 을사용해해당코드를가져온다. 마지막으로 dd 태그사이에있는값을추출하기위해해당정규표현식을작성하고, 17행에서최종주식정보를추출한다.