제 소개
• 박사과정 n년차
• 데이터마이닝 전공
• “Yak shaver”
– 대한민국 정치의 모든 것(http://pokr.kr),
KoNLPy(http://konlpy.org) 등을 만드는데 참여
• 현재는 졸업을 위해 칩거 중
3
목차
1. 초간단 손 스크래핑
2. 용어 정리: 크롤링? 스크래핑?
3. 파이썬 3분만에 시작하기 (초간단 문법)
4. 국회 회의록 스크래퍼 갖다 쓰기
5. 국회 회의록 스크래퍼 직접 만들어보기
참고자료
4
초간단 손 스크래핑! 3단계
1. Scrape하려는 웹페이지 목록 만들기
2. 웹페이지 전체 다운로드 받기
3. 웹페이지 parsing
5
초간단 손 스크래핑! 3단계
1. Scrape하려는 웹페이지 목록 만들기
(일단 네 개만)
http://movie.naver.com/movie/bi/mi/basic.nhn?code=121048
http://movie.naver.com/movie/bi/mi/basic.nhn?code=129049
http://movie.naver.com/movie/bi/mi/basic.nhn?code=118917
http://movie.naver.com/movie/bi/mi/basic.nhn?code=114278
6
초간단 손 스크래핑! 3단계
1. Scrape하려는 웹페이지 목록 만들기
2. 웹페이지 목록 전체 다운로드 받기
7
초간단 손 스크래핑! 3단계
1. Scrape하려는 웹페이지 목록 만들기
2. 웹페이지 전체 다운로드 받기
3. 웹페이지 parsing
찾음! 8
용어 정리
• URL
– Unique resource locator
– 특정 웹페이지로 연결해주는 주소
– 일명 “링크”
http://likms.assembly.go.kr/bill/jsp/BillDetail.jsp?bill_id=PRC_H1W5H1K0Z1M2G1Q0Q5I5T0O5H4O2H8
scheme host path query
* 더 자세한 내용은 위키피디아에
https://en.wikipedia.org/wiki/Uniform_Resource_Locator 16
용어 정리
• 웹브라우저
– 주소창에 URL을 입력하면 웹페이지를 서버에
요청하고 서버로부터 받은 HTML을 해석해서
화면에 띄워주는 프로그램
17
용어 정리
• HTML (1/3)
– Hypertext markup language
– 웹페이지를 작성하는데 사용되는 마크업 언어
– 태그로 HTML 요소(element)를 만든다
– 일반적인 태그 구조:
<태그명 속성명=“속성값” 다른속성명=“다른속성값”>텍스트</태그명>
18
용어 정리
• HTML (2/3)
– 예시 파일: example.html
<h1>제목</h1>
<p>문단 하나</p>
<p class=“special”>문단 둘</p>
<p class=“special”>문단 셋</p>
<a href=http://some.url.com/>링크</a>
<br>
<table id=“my-table” class=“table-condensed table-striped”>
<tr><td>표</td><td>하나</td></tr>
<tr><td>줄</td><td>둘</td></tr>
</table>
p 태그에 “special”이라는 값을 가진 class 속성이 추가된
HTML 요소 두 개
줄바꿈 태그
table 태그에 “my-table”이라는 값을 가진 id 속성과
table-condensed, table-striped의 두 가지 값을 가진
class 속성이 있는 HTML 요소
a 태그에 URL을 href 속성에 담고 있는 HTML 요소
19
용어 정리
• HTML (3/3)
• 예시 파일: example.html
텍스트 에디터*로 열어서 본
example.html
웹 브라우저로 열어서 본
example.html
* 메모장, Notepad++, Vim 등 텍스트 파일을 수정할 수 있는 프로그램.
화면 캡쳐에 있는 에디터는 Sublime Text 2 20
용어 정리
• HTTP
– Hypertext transfer protocol
– Hypertext로 작성된 웹문서를 주고 받는 통신
규약
응답
response
요청
request
내 컴퓨터
서버
21
(좀 더 엄밀한) 용어 정리
• 크롤링
거미가 (spider)
거미줄을 (hyperlink)
기어다니듯(crawling)
World Wide Web
webpage
hyperlink 22
(좀 더 엄밀한) 용어 정리
• 스크래핑
– 정해진 형태의 웹페이지에서 원하는 데이터를
추출하는 작업 (속어: “긁기”)
– 지금 우리가 하려는 것
암살,9.11,8.97 마션,8.73,8.41 인턴,9.04,8.98 리그레션,6.75,7.08
23
목차
1. 초간단 손 스크래핑
2. 용어 정리: 크롤링? 스크래핑?
3. 파이썬 3분만에 시작하기 (초간단 문법)
4. 국회 회의록 스크래퍼 갖다 쓰기
5. 국회 회의록 스크래퍼 직접 만들어보기
참고자료
24
패키지 설치
• R
• Python*
25
install.packages(‘package_name’)
pip install package_name
* 단, 파이썬 쉘 밖에서 실행
패키지 사용
• R
• Python
26
library(‘package_name’)
import package_name
루프 (1/2)
30
• R
• Python
for (i in 1:4) {
print(i)
}
for i in range(1,5):
print(i)
루프 (2/2)*
31
• R
• Python
a <- 1:3
s <- sapply(a, function(x) x^2)
print(sum(s))
a = range(1,4)
s = [i**2 for i in a]
print(sum(s))
* These two are not directly comparable. In R, apply is a very powerful function for looping. (Much frequently used than for loops.)
On the other hand, in Python, list comprehensions are frequently used.
목차
1. 초간단 손 스크래핑
2. 용어 정리: 크롤링? 스크래핑?
3. 파이썬 3분만에 시작하기 (초간단 문법)
4. 국회 회의록 스크래퍼 갖다 쓰기
5. 국회 회의록 스크래퍼 직접 만들어보기
참고자료
41
좀 더 똑똑하고(?) 편한(?) 방법
42
http://pokr.kr/meeting/?date=2012-12-31
구조화가 잘 되어 있는 pokr.kr
데이터 스크래핑
43
http://pokr.kr/meeting/19309244267/dialog
페이지 요소 검사
44
좋은 도구.
이 포인터를 이용해서
웹페이지를 클릭하면
해당 HTML 요소를 찾아준다.
우리가 크롤링하고 싶은 곳
페이지 요소 검사
45
우리가 크롤링하고 싶은 곳
class 속성값이 “dialogue”인 div 안에
class 속성값이
“statement”, “issue”, “time” 등인 div가
여러 개 들어 있다!
(그 div 안의 div가 각각 발언, 안건, 시간 cell 하나)
파싱 (parsing)
• HTML 문서는 기본적으로 tree 형태이다.
• 방금 전에도:
47
1. class 속성값이 “dialogue”인 div 안에 class 속성값이 “statement”,
“issue”, “time” 등인 div가 여러 개 들어 있다
2. class 속성값이 “statement”인 div 안에 class 속성값이 “speaker”,
“content” 등인 div가 여러 개 들어 있다!
파싱 (parsing)
• HTML 문서는 기본적으로 tree 형태이다.
• 방금 전에도:
48
<div>
class:dialogue
<div>
class:statement
<div>
class:issue
<div>
class:time
<div>
class:statement
<div>
class:speaker
<div>
class:content
…
…
root
XPath 소개
• HTML (또는 XML)을 파싱할때 사용하는 문법
49
root.xpath(‘.//div’)
root 밑에서 모든 div를 찾아라
XPath 소개
• HTML (또는 XML)을 파싱할때 사용하는 문법
50
root.xpath(‘.//div[@class=“dialogue”]’)
root 밑에서 class 속성값이 “dialogue”인 모든 div를 찾아라
XPath 소개
• HTML (또는 XML)을 파싱할때 사용하는 문법
51
root.xpath(‘.//div[@class=“dialogue”]/div’)
root 밑에서 class 속성값이 “dialogue”인 모든 div를 찾고
그 바로 하위에 있는 모든 div를 찾아라
참고:
• 슬래시 한 번 (/): 바로 하위의
• 슬래시 두 번 (//): 모든 하위의
XPath 소개
• HTML (또는 XML)을 파싱할때 사용하는 문법
52
root.xpath(‘.//div[@class=“dialogue”]/div[@class=“statement”]’)
root 밑에서 class 속성값이 “dialogue”인 모든 div를 찾고
그 바로 하위에서 class 속성값이 “statement”인 모든 div를 찾아라
참고:
• 슬래시 한 번 (/): 바로 하위의
• 슬래시 두 번 (//): 모든 하위의