SlideShare a Scribd company logo
1 of 39
Download to read offline
Web Crawling with
Python
국민대학교
빅데이터 분석 학회 D&A
https://www.facebook.com/kookmin.bigdata.dna2013/
rhswl2135@gmail.com
목차
1. 개요
2.정적 크롤링 개념 및 실습
3. 크롤링에 날개를 달자 !
4.동적 크롤링 개념 및 실습
5.텍스트 마이닝
Web 상에서 범람하고 있는 데이터들
< 망고플레이트 – 국내 맛집 리뷰 > < 지니 – 국내 음원 사이트 (노래 가사) > < 잡코리아 – 합격 자소서 >
Web 상에서 데이터를 수집할 수 있는 이유
< 다음 뉴스 >
- 웹(Web)은 그림, 음악, 글 등이 어우러진 하이퍼
텍스트(hypertext) 를 중심으로 구성되어 있음
- 또한 대부분의 웹 사이트들의 데이터들은 HTML.
CSS, JavaScript 형태로 저장되어 있음
- 웹 페이지의 형식에 정교하게 접근할 수 있다
면 우리가 인터넷 상에서 보고 있는 데이터들을
수집할 수 있음
- 뉴스 제목에 해당하는 부분에 접근하여 데이터를
추출할 수 있음
웹 페이지 에서
우측 마우스 클릭 → 검사 (ctrl + shift + i)
뉴스기사 제목에 해당하는
웹 페이지의 형식
인터넷의 원리
- 인터넷은 요청을 보내는 클라이언트(client)와 요청에 응답을 하는
server로 구성 됨
- 우리가 웹 서핑을 하면서 url을 클릭하는 행위는 client가
server에 요청을 보내는 행위라고 할 수 있음
- Url을 클릭하면 (=server에 요청을 보내면) server는 그에 상
응하는 응답을 함
- 인터넷 상에서 특정 링크를 클릭하게 되면 웹 브라우저 상에 표
현되는 웹 문서가 바뀌는데 웹 문서를 표현하는 방식을 HTML이
라고 함
- CSS, java script 등도 각각의 목적에 맞게 HTML을 보조함
- HTTP란 clinet가 server에 요청을 보내면, server가 응답
하는 방식으로 이루어 짐
출처:국민대학교 비정형 데이터 분석(doc.mindscale.kr/km/unstructured
Web Crawling 이란?
Web Crawling이란 컴퓨터 소프트웨어 기술로 Web Site에서
원하는 정보를 추출하는 것을 의미한다. 이때 한 페이지만 머무는
것이 아니라 그 페이지에 링크되어 있는 또 다른 페이지를 차례대
로 방문하고 링크를 따라 웹을 돌아다니는 모습이 마치 거미와 비슷
하다고 해서 스파이더라고 부르기도 한다.
출처: 위키백과
Web Crawling Process
request HTML HTML
Parsing
원하는
내용에
접근 및 추
출
Save
url로 부터
HTML 소스 코드
를 요청한다.
Server로 부터
HTML 소스 코드
를 응답 받는다 .
HTML을 분석에
용이한 형태로
Parsing 한다.
원하는 내용에 접
근하여 특정 부분을
추출한다. CSS
선택자, Xpath
방식이 있다.
수집한 데이터를
저장한다.
url
데이터를 수집할
url page를 선택
Web Crawling의 방식
1. 정적 크롤링
• 어느 상황에서나 같은 주소에서 변하지 않는 데이터를 기대할 수 있는 경우
• 수집 대상에 한계가 있으나 속도가 빠르다.
• 사용 모듈 – requests
2. 동적 크롤링
• 입력, 클릭 등 실제 브라우저에서 행하는 행동 들을 해야만 데이터를 수집할 수 있는 경우 (매크로와 매우 흡사)
• 수집 대상에 한계가 없으나 속도가 느리다
• 사용 모듈 – Selenium
* 두 가지 방법을 혼용 해서 쓰기도 함
Web Crawling의 방식
1. 정적 크롤링
• 어느 상황에서나 같은 주소에서 변하지 않는 데이터를 기대할 수 있는 경우
• 수집 대상에 한계가 있으나 속도가 빠르다.
• 사용 모듈 – requests
2. 동적 크롤링
• 입력, 클릭 등 실제 브라우저에서 행하는 행동 들을 해야만 데이터를 수집할 수 있는 경우 (매크로와 매우 흡사)
• 수집 대상에 한계가 없으나 속도가 느리다
• 사용 모듈 – Selenium
* 두 가지 방법을 혼용 해서 쓰기도 함
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 제목 크롤링
https://search.daum.net/search?nil_suggest=btn&w=news&DA=PGD&cluster=y
&q=%EC%B9%B4%EC%B9%B4%EC%98%A4%EC%B9%B4%ED%92%80&p=1
1. 다음 뉴스를 접속한다.
2. ‘카카오카풀’ 을 검색한다.
3. Client가 server에 get 방식으로 요청(request)을 보낸다.
4. server 응답 여부를 확인한다.
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 제목 크롤링
HTML을 문자열 형태로 가져와 lxml.fromstring()에 넘긴다
element에 HTML을 파싱한 형태의 요소가 생긴다.
분석에 용이한 형태로 바꿔준다고 생각하면 된다.
주로 쓰는 라이브러리는 BeautifulSoup, lxml 등이 있다. 우리는 lxml을 사용할 것이다.
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 제목 크롤링
카카오 카풀과 관련된 첫 번 째 뉴스 제목의 HTML 구조
뉴스 제목에 해당하는 내용에 접근 (CSS 선택자 사용)
✓ 각 요소에 접근하는 방법에 능숙 하려면 HTML 구조를 어느정도 알고 있어야한다.
✓ HTML 구조에 대한 내용은 뒷부분에서 다루겠다.
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 요약 본문 크롤링
✓ 기사 제목이 아닌 본문의 요약된 내용을 수집하려면 CSS 선택자 경로만 바꿔주면 된다.
✓ 다음 뉴스는 비교적 HTML 구조가 깔끔한 편이라서 크롤링하기 쉽다.
뉴스 요약 본문에 해당하는 내용에 접근 (CSS 선택자 사용)
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 요약 본문 크롤링
너무 쉽다? 그렇다면, 좀 더 응용해보자.
앞의 슬라이드에서 언급한 웹 크롤링의 정의를 보면, “한 페이지만 머무는 것이 아니라 그 페이지에 링크되어 있는 또 다른 페이지
를 차례대로 방문하고 링크를 따라 웹을 돌아다니는 모습이 마치 거미와 비슷하다고 해서 스파이더라고 부르기도 한다.” 라고 했다.
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링
뉴스 기사의 본문을 추출하려면 기존 url에 계속 머무는 것이 아니라,
각 뉴스 기사의 url을 클릭해야함
Click!
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링
Page1, Page2, … , Page10
Page1 Page2 Page10…
…link link link… link link link… link link link…
content content content content content content content content content… … ……
뉴스 기사 본문
<순서>
1. Page url list 생성
2. 각 page url에서 뉴스기사 본문 link url list 생성 및 결합
3. 각 link에서 뉴스 기사 본문 추출
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링
여러 페이지의 모든 기사 본문을 가져오고 싶다.
거미처럼 움직여보자!
https://search.daum.net/search?w=news&DA=PGD&enc=utf8&cluster=y&cluster_page=1&q=%EC%
B9%B4%EC%B9%B4%EC%98%A4%EC%B9%B4%ED%92%80&p=1
https://search.daum.net/search?w=news&DA=PGD&enc=utf8&cluster=y&cluster_page=1&q=%EC%
B9%B4%EC%B9%B4%EC%98%A4%EC%B9%B4%ED%92%80&p=2
https://search.daum.net/search?w=news&DA=PGD&enc=utf8&cluster=y&cluster_page=1&q=%EC%
B9%B4%EC%B9%B4%EC%98%A4%EC%B9%B4%ED%92%80&p=100
각 페이지 별로 url은 일정한 패턴을 가지고 있다.
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링
페이지에서 뉴스 기사로 이동하는 링크에 접근해야 한다.
각 언론사의 웹페이지 마다 HTML 형식이 다름으로
다음 뉴스에 접근해야 함
1 page에서 각 뉴스기사로 이동하는 링크
Web Crawling 실습 – 정적 크롤링
다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링
첫 번 째 페이지의 첫 번 째 뉴스 기사에 해당하는 웹페이지 및 HTML 구조 뉴스 기사 본문에 접근하는 css 선택자를 지정한 후 for 문을 활용해 코드를 일반화 시킴
HTML (=Hyper Text Markup Language): 웹 페이지를 만드는데 널리 쓰이는 마크업 언어
HTML
다음 뉴스 웹페이지의 HTML 구조
▪ 모든 문서는 <html>로 시작하여 </html>로 끝난다.
▪ <html> 아래에는 <head>와 <body>가 있다.
▪ <body>의 하위에는 <div>가 있다.
▪ 모든 노드는 태그로 감싸여 있는데, 美, 무역협상중 ~ 인상이라는 내용은
<h3> ~ </h3>로 감싸져 있다. 즉, 내용 시작과 종료 시에 태그를 쓴
다.
▪ 태그 이름에는 head, title, div, h1, h2, h3 등이 있다.
▪ 노드는 내용과는 별개로 속성(attribute)를 갖는다. 속성은 HTML 요소
에 대한 추가적인 정보를 제공하는데 사용된다.
▪ 속성이름 = ‘값’ 형태로 나타낸다.
▪ <a>라는 태그에 href 속성에 뉴스 기사로 이동하는 url 링크가 담겨져
있다.
▪ 우리는 뉴스 기사 링크에 접근하기 위해 .attrib['href’] 를 사용했었다.
크롤링에 날개를 달아줘!
HTML Parsing
HTML에서 특정 부분을 추출하는 방식
CSS selector
① HTML 문서의 서식을 지정하기 위해서 사용됨
② 짧고 간단하게 특정 부분을 추출할 수 있음
Xpath
① 직접 노드로 접근하는 경로(path)를 지정함
② 복잡한 경로도 찾아갈 수 있음
CSS selector
(1) class 이름으로 선택 → . 사용
-> 태그가 <div> 인 엘리먼트 중에서 class = ‘div,news_text2018’
-> 점(.) 앞에 특정 태그를 넘겨주면, 해당 태그에 대해서만 선택한다.
-> div.news_text2018
(2) id 이름으로 선택 → # 사용
-> 태그가 <id> 인 엘리먼트 중에서 id = ‘article_txt’
-> id로 엘리먼트를 선택하면 #을 사용한다.
-> div#article_txt
Xpath
오른쪽 마우스 클릭
Copy
Copy XPath
손쉽게 Xpath 절대경로를 알아낼 수 있음
-> element.xpath(//*[@id="article_txt"])
일반화된 크롤러를 만들기 위해서는 Xpath에 대해서 이해하는 것이 도움이 됨
a 라는 노드에 접근하고 싶다
절대경로: /body/p/a
상대경로: //a
Web Crawling의 방식
1. 정적 크롤링
• 어느 상황에서나 같은 주소에서 변하지 않는 데이터를 기대할 수 있는 경우
• 수집 대상에 한계가 있으나 속도가 빠르다.
• 사용 모듈 – requests
2. 동적 크롤링
• 입력, 클릭 등 실제 브라우저에서 행하는 행동 들을 해야만 데이터를 수집할 수 있는 경우 (매크로와 매우 흡사)
• 수집 대상에 한계가 없으나 속도가 느리다
• 사용 모듈 – Selenium
• 사용 예시
* 두 가지 방법을 혼용 해서 쓰기도 함
Web Crawling 실습 – 동적 크롤링
selenium을 활용한 youtube 크롤링
① Selenium은 웹 브라우저를 제어해주는 라이브러리
② 크롤링이 어려운 사이트인 경우 Selenium 을 사용해 무적의 크롤러를 만들 수 있음
③ Selenium을 사용해 실제 웹 사이트를 제어하여 (like 매크로) 쉽게 크롤링할 수 있음
④ 실제 웹 브라우저를 띄우기 때문에 속도가 느리다는 단점이 있음
먼저, 크롬 웹드라이버를 다운로드 받는다.
링크 : 크롬 웹드라이버
Web Crawling 실습 – 동적 크롤링
selenium을 활용한 youtube 크롤링
작업 경로에 chromedriver.exe 를 넣어준다!운영 체제에 맞는 chromedriver를 설치한다.
Web Crawling 실습 – 동적 크롤링
selenium을 활용한 youtube 크롤링
Selenium library를 설치하고 크롬 브라우저를 연다. 빈 브라우저가 열린다
브라우저를 띄우는 시간이 있음으로 3초 정도 쉬어준다. Selenium을 통해 크롤러를 만들
때는 모든 코드가 유기적으로 움직여야 함으로 적절하게 시간을 제어해줘야 한다.
Web Crawling 실습 – 동적 크롤링
selenium을 활용한 youtube 크롤링
Web Crawling 실습 – 동적 크롤링
selenium을 활용한 youtube 크롤링
Css 선택자를 못찾겠다 싶으면
Copy Selector 방법을 써도 무관
크롬 브라우저에서
‘벤쯔’가 입력되는 것을 볼 수 있음
Web Crawling 실습 – 동적 크롤링
selenium을 활용한 youtube 크롤링
Copy Selector
Copy Selector
Web Crawling 실습 – 동적 크롤링
selenium을 활용한 youtube 크롤링
Title 이라는 속성에 제목 text가 존재함
불필요한 데이터가 일부 수집되긴 했지만,
우리가 필요한 데이터는 수집되었다.
필요한 데이터만 수집하려면,
Xpath를 이용해 정교하게 접근하면 된다.
(정교한 코드는 첨부파일로 제공 ^^ 직접 한번 해보세요)
텍스트 마이닝
* TDM (= Term document matrix) – 단어 문서 행렬 : 문서 별로 등장한 단어의 빈도를 표(행렬) 형태로 나타낸 것
→ 자연어 텍스트를 컴퓨터가 인식할 수 있는 정형 데이터로 변환해줌
“오늘은 김치와 소고기를 먹어보겠습니다.”
“내일은 소고기 말고 참치를 먹어보겠습니다.”
오늘 김치 소고기 먹다
내일 소고기 참치 먹다
Tokenizing
오늘 김치 소고기 먹다
내일 소고기 참치 먹다
TDM
오늘 김치 소고기 내일 참치 먹다
1 1 1 0 0 1
0 0 1 1 1 1
한국어 토큰화에 사용되는 라이브러리들
→ Konlpy, Twitter, Worin, khaiii
TDM
* TDM (= Term document matrix) – 단어 문서 행렬 : 문서 별로 등장한 단어의 빈도를 표(행렬) 형태로 나타낸 것
→ 자연어 텍스트를 컴퓨터가 인식할 수 있는 정형 데이터로 변환해줌
오늘 김치 소고기 먹다
내일 소고기 참치 먹다
TDM
오늘 김치 소고기 내일 참치 먹다
1 1 1 0 0 1
0 0 1 1 1 1
1. 열의 개수 = 모든 문서에서 사용된 단어의 고유 값(두 문서
에서 겹치지 않는 단어는 총 6개임)
2. 자연어에서 사용되는 단어의 수는 매우 많다. 하지만, 하나
의 문서에서 사용되는 단어의 수는 제한적임 따라서 TDM
의 대부분의 칸의 값은 0이 됨 (희소 행렬)
3. 따라서 TDM에 여러 기법을 적용하면 분석이 어렵다. 이를
해결하기 위해 여러가지 방법을 사용함
4. 열합계를 구하면 문서에서 등장한 각 단어 별 빈도 수를 알
수 있다.
Tf-idf
Tf-idf (term frequency – inverse document frequency)
▪ 단순 빈도수를 나타내는 TDM은 성능이 좋지 않다. TDM에 tf-idf 가중치를 적용하면 성능을 높일 수 있음
▪ tf-idf 는 단어가 특정 문서에 얼마나 중요한지 나타내는 가중치 임
▪ 모든 문서에 등장하는 단어는 가중치가 낮음 (ex. 나는, 너는, 우리는, 요리를)
▪ 특정 문서에만 등장하는 단어는 가중치가 높음 (ex. 마라탕, 탕수육, 파프리카 소스)
▪ 한글의 경우 “나는” 이라는 단어는 거의 모든 문서에 등장하기 때문에 낮은 가중치를 받아 분석에서 제외될 수 있음
가중치 ➔ 분모가 커진다 = 단어 x를 포함하는 문서의 수가 많아진다
텍스트 마이닝 개요
Web
Crawling DataBase
Text
Cleansing
Tokenizing
TDM
Word Embedding
Modeling
데이터 수집 데이터 저장
데이터 클린징
(불용어, 특수문자 제거)
명사 추출 컴퓨터가 인식할 수
있는 형태로 변환
원하는 과업 진행
감정분석
데이터 불러오기 - 아마존 제품 리뷰 TDM (출처 : UCI 머신러닝 리포지토리 - Sentiment Labelled Sentences - amazon_cells_labelled.txt)
Column1 : 아마존 제품에 대한 리뷰
Column2 : 각 리뷰가 긍정 or 부정 (0 or 1) 인지
텍스트 데이터가 수집되고 지도학습을 할 수 있도록 labeling이 완료된 상태의 데이터
✓ 자연어 데이터 (비정형 데이터)를 컴
퓨터가 인식할 수 있도록 정형 데이터
로 바꿔줘야 한다.
✓ 정형 데이터로 변환하는 예시는 앞에
서 TDM이 있다.
✓ TDM에 tf-idf 가중치를 적용한 것도
자연어를 정형 데이터로 바꾸는 방법
중 하나이다.
감정분석 (지도학습)
M
O
D
E
L
Logistic Regression
Deep Neural Network 등등..
→ 학습을 통해 모델 생성
TDM
Label
부정(0) or 긍정(1)
[이진 분류]
Thank you !

More Related Content

What's hot

[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint NAVER D2
 
엘라스틱 서치 세미나
엘라스틱 서치 세미나엘라스틱 서치 세미나
엘라스틱 서치 세미나종현 김
 
웹수집(Web Crawling)
웹수집(Web Crawling)웹수집(Web Crawling)
웹수집(Web Crawling)wang inyoung
 
boosting 기법 이해 (bagging vs boosting)
boosting 기법 이해 (bagging vs boosting)boosting 기법 이해 (bagging vs boosting)
boosting 기법 이해 (bagging vs boosting)SANG WON PARK
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128beom kyun choi
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기NAVER D2
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝NAVER D2
 
Media queries A to Z
Media queries A to ZMedia queries A to Z
Media queries A to ZShameem Reza
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Seongyun Byeon
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기AWSKRUG - AWS한국사용자모임
 
Rest and the hypermedia constraint
Rest and the hypermedia constraintRest and the hypermedia constraint
Rest and the hypermedia constraintInviqa
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScriptLilia Sfaxi
 
인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)
인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)
인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)wonseok jung
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민종민 김
 
Introduction to ajax
Introduction to ajaxIntroduction to ajax
Introduction to ajaxNir Elbaz
 
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and HydraBuilding Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and HydraMarkus Lanthaler
 
(Fast) Introduction to HTML & CSS
(Fast) Introduction to HTML & CSS (Fast) Introduction to HTML & CSS
(Fast) Introduction to HTML & CSS Dave Kelly
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화NAVER D2
 

What's hot (20)

CSS
CSS CSS
CSS
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
엘라스틱 서치 세미나
엘라스틱 서치 세미나엘라스틱 서치 세미나
엘라스틱 서치 세미나
 
웹수집(Web Crawling)
웹수집(Web Crawling)웹수집(Web Crawling)
웹수집(Web Crawling)
 
boosting 기법 이해 (bagging vs boosting)
boosting 기법 이해 (bagging vs boosting)boosting 기법 이해 (bagging vs boosting)
boosting 기법 이해 (bagging vs boosting)
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝
 
Intro to beautiful soup
Intro to beautiful soupIntro to beautiful soup
Intro to beautiful soup
 
Media queries A to Z
Media queries A to ZMedia queries A to Z
Media queries A to Z
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
 
Rest and the hypermedia constraint
Rest and the hypermedia constraintRest and the hypermedia constraint
Rest and the hypermedia constraint
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScript
 
인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)
인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)
인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민
 
Introduction to ajax
Introduction to ajaxIntroduction to ajax
Introduction to ajax
 
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and HydraBuilding Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
 
(Fast) Introduction to HTML & CSS
(Fast) Introduction to HTML & CSS (Fast) Introduction to HTML & CSS
(Fast) Introduction to HTML & CSS
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화
 

Similar to 파이썬을 활용한 웹 크롤링

[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼Cheol Kang
 
Clou(python searh system)
Clou(python searh system)Clou(python searh system)
Clou(python searh system)wowodlr21
 
Realtime Big data Anaytics and Exampes of Daum (2013)
Realtime Big data Anaytics and Exampes of Daum (2013)Realtime Big data Anaytics and Exampes of Daum (2013)
Realtime Big data Anaytics and Exampes of Daum (2013)Channy Yun
 
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지yongwoo Jeon
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Gruter
 
Google Power Searching - 구글 검색 120% 활용하기
Google Power Searching - 구글 검색 120% 활용하기Google Power Searching - 구글 검색 120% 활용하기
Google Power Searching - 구글 검색 120% 활용하기i4uworks
 
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기SangJin Kang
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투Ubuntu Korea Community
 
Daum5강 당신도 파워블로거가 될 수 있어요!
Daum5강 당신도 파워블로거가 될 수 있어요!Daum5강 당신도 파워블로거가 될 수 있어요!
Daum5강 당신도 파워블로거가 될 수 있어요!Sue Hyun Jung
 
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?Nts Nuli
 
Spark streaming tutorial
Spark streaming tutorialSpark streaming tutorial
Spark streaming tutorialMinho Kim
 
[제12회 인터넷 리더십] 온라인 네트워크를 전략적 홍보_검색_전은서
[제12회 인터넷 리더십] 온라인 네트워크를 전략적 홍보_검색_전은서[제12회 인터넷 리더십] 온라인 네트워크를 전략적 홍보_검색_전은서
[제12회 인터넷 리더십] 온라인 네트워크를 전략적 홍보_검색_전은서daumfoundation
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15Chanwoong Kim
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작Changwon Choe
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020Jinwoong Kim
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWSKRUG - AWS한국사용자모임
 
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWSMatthew (정재화)
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 

Similar to 파이썬을 활용한 웹 크롤링 (20)

[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
 
Clou(python searh system)
Clou(python searh system)Clou(python searh system)
Clou(python searh system)
 
Realtime Big data Anaytics and Exampes of Daum (2013)
Realtime Big data Anaytics and Exampes of Daum (2013)Realtime Big data Anaytics and Exampes of Daum (2013)
Realtime Big data Anaytics and Exampes of Daum (2013)
 
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
 
Google Power Searching - 구글 검색 120% 활용하기
Google Power Searching - 구글 검색 120% 활용하기Google Power Searching - 구글 검색 120% 활용하기
Google Power Searching - 구글 검색 120% 활용하기
 
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
 
Seo
SeoSeo
Seo
 
Daum5강 당신도 파워블로거가 될 수 있어요!
Daum5강 당신도 파워블로거가 될 수 있어요!Daum5강 당신도 파워블로거가 될 수 있어요!
Daum5강 당신도 파워블로거가 될 수 있어요!
 
웹표준 교육
웹표준 교육웹표준 교육
웹표준 교육
 
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
 
Spark streaming tutorial
Spark streaming tutorialSpark streaming tutorial
Spark streaming tutorial
 
[제12회 인터넷 리더십] 온라인 네트워크를 전략적 홍보_검색_전은서
[제12회 인터넷 리더십] 온라인 네트워크를 전략적 홍보_검색_전은서[제12회 인터넷 리더십] 온라인 네트워크를 전략적 홍보_검색_전은서
[제12회 인터넷 리더십] 온라인 네트워크를 전략적 홍보_검색_전은서
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
 
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 

More from HWANGTAEYONG

DNN-Based Prediction Model for Spatial-Temporal Data
DNN-Based Prediction Model for Spatial-Temporal DataDNN-Based Prediction Model for Spatial-Temporal Data
DNN-Based Prediction Model for Spatial-Temporal DataHWANGTAEYONG
 
Prediction of bus riders at the time of departure
Prediction of bus riders at the time of departurePrediction of bus riders at the time of departure
Prediction of bus riders at the time of departureHWANGTAEYONG
 
Strategies to cluster customers using machine learning and send differentiate...
Strategies to cluster customers using machine learning and send differentiate...Strategies to cluster customers using machine learning and send differentiate...
Strategies to cluster customers using machine learning and send differentiate...HWANGTAEYONG
 
PBL : How to live long and healthy in Health Promotion House
PBL : How to live long and healthy in Health Promotion HousePBL : How to live long and healthy in Health Promotion House
PBL : How to live long and healthy in Health Promotion HouseHWANGTAEYONG
 
Ai&ML Seminar in N3N cloud
Ai&ML Seminar in N3N cloudAi&ML Seminar in N3N cloud
Ai&ML Seminar in N3N cloudHWANGTAEYONG
 
Development of a forecasting model for expected profit for lineage users
Development of a forecasting model for expected profit for lineage usersDevelopment of a forecasting model for expected profit for lineage users
Development of a forecasting model for expected profit for lineage usersHWANGTAEYONG
 

More from HWANGTAEYONG (6)

DNN-Based Prediction Model for Spatial-Temporal Data
DNN-Based Prediction Model for Spatial-Temporal DataDNN-Based Prediction Model for Spatial-Temporal Data
DNN-Based Prediction Model for Spatial-Temporal Data
 
Prediction of bus riders at the time of departure
Prediction of bus riders at the time of departurePrediction of bus riders at the time of departure
Prediction of bus riders at the time of departure
 
Strategies to cluster customers using machine learning and send differentiate...
Strategies to cluster customers using machine learning and send differentiate...Strategies to cluster customers using machine learning and send differentiate...
Strategies to cluster customers using machine learning and send differentiate...
 
PBL : How to live long and healthy in Health Promotion House
PBL : How to live long and healthy in Health Promotion HousePBL : How to live long and healthy in Health Promotion House
PBL : How to live long and healthy in Health Promotion House
 
Ai&ML Seminar in N3N cloud
Ai&ML Seminar in N3N cloudAi&ML Seminar in N3N cloud
Ai&ML Seminar in N3N cloud
 
Development of a forecasting model for expected profit for lineage users
Development of a forecasting model for expected profit for lineage usersDevelopment of a forecasting model for expected profit for lineage users
Development of a forecasting model for expected profit for lineage users
 

파이썬을 활용한 웹 크롤링

  • 1. Web Crawling with Python 국민대학교 빅데이터 분석 학회 D&A https://www.facebook.com/kookmin.bigdata.dna2013/ rhswl2135@gmail.com
  • 2. 목차 1. 개요 2.정적 크롤링 개념 및 실습 3. 크롤링에 날개를 달자 ! 4.동적 크롤링 개념 및 실습 5.텍스트 마이닝
  • 3. Web 상에서 범람하고 있는 데이터들 < 망고플레이트 – 국내 맛집 리뷰 > < 지니 – 국내 음원 사이트 (노래 가사) > < 잡코리아 – 합격 자소서 >
  • 4. Web 상에서 데이터를 수집할 수 있는 이유 < 다음 뉴스 > - 웹(Web)은 그림, 음악, 글 등이 어우러진 하이퍼 텍스트(hypertext) 를 중심으로 구성되어 있음 - 또한 대부분의 웹 사이트들의 데이터들은 HTML. CSS, JavaScript 형태로 저장되어 있음 - 웹 페이지의 형식에 정교하게 접근할 수 있다 면 우리가 인터넷 상에서 보고 있는 데이터들을 수집할 수 있음 - 뉴스 제목에 해당하는 부분에 접근하여 데이터를 추출할 수 있음 웹 페이지 에서 우측 마우스 클릭 → 검사 (ctrl + shift + i) 뉴스기사 제목에 해당하는 웹 페이지의 형식
  • 5. 인터넷의 원리 - 인터넷은 요청을 보내는 클라이언트(client)와 요청에 응답을 하는 server로 구성 됨 - 우리가 웹 서핑을 하면서 url을 클릭하는 행위는 client가 server에 요청을 보내는 행위라고 할 수 있음 - Url을 클릭하면 (=server에 요청을 보내면) server는 그에 상 응하는 응답을 함 - 인터넷 상에서 특정 링크를 클릭하게 되면 웹 브라우저 상에 표 현되는 웹 문서가 바뀌는데 웹 문서를 표현하는 방식을 HTML이 라고 함 - CSS, java script 등도 각각의 목적에 맞게 HTML을 보조함 - HTTP란 clinet가 server에 요청을 보내면, server가 응답 하는 방식으로 이루어 짐 출처:국민대학교 비정형 데이터 분석(doc.mindscale.kr/km/unstructured
  • 6. Web Crawling 이란? Web Crawling이란 컴퓨터 소프트웨어 기술로 Web Site에서 원하는 정보를 추출하는 것을 의미한다. 이때 한 페이지만 머무는 것이 아니라 그 페이지에 링크되어 있는 또 다른 페이지를 차례대 로 방문하고 링크를 따라 웹을 돌아다니는 모습이 마치 거미와 비슷 하다고 해서 스파이더라고 부르기도 한다. 출처: 위키백과
  • 7. Web Crawling Process request HTML HTML Parsing 원하는 내용에 접근 및 추 출 Save url로 부터 HTML 소스 코드 를 요청한다. Server로 부터 HTML 소스 코드 를 응답 받는다 . HTML을 분석에 용이한 형태로 Parsing 한다. 원하는 내용에 접 근하여 특정 부분을 추출한다. CSS 선택자, Xpath 방식이 있다. 수집한 데이터를 저장한다. url 데이터를 수집할 url page를 선택
  • 8. Web Crawling의 방식 1. 정적 크롤링 • 어느 상황에서나 같은 주소에서 변하지 않는 데이터를 기대할 수 있는 경우 • 수집 대상에 한계가 있으나 속도가 빠르다. • 사용 모듈 – requests 2. 동적 크롤링 • 입력, 클릭 등 실제 브라우저에서 행하는 행동 들을 해야만 데이터를 수집할 수 있는 경우 (매크로와 매우 흡사) • 수집 대상에 한계가 없으나 속도가 느리다 • 사용 모듈 – Selenium * 두 가지 방법을 혼용 해서 쓰기도 함
  • 9. Web Crawling의 방식 1. 정적 크롤링 • 어느 상황에서나 같은 주소에서 변하지 않는 데이터를 기대할 수 있는 경우 • 수집 대상에 한계가 있으나 속도가 빠르다. • 사용 모듈 – requests 2. 동적 크롤링 • 입력, 클릭 등 실제 브라우저에서 행하는 행동 들을 해야만 데이터를 수집할 수 있는 경우 (매크로와 매우 흡사) • 수집 대상에 한계가 없으나 속도가 느리다 • 사용 모듈 – Selenium * 두 가지 방법을 혼용 해서 쓰기도 함
  • 10. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 제목 크롤링 https://search.daum.net/search?nil_suggest=btn&w=news&DA=PGD&cluster=y &q=%EC%B9%B4%EC%B9%B4%EC%98%A4%EC%B9%B4%ED%92%80&p=1 1. 다음 뉴스를 접속한다. 2. ‘카카오카풀’ 을 검색한다. 3. Client가 server에 get 방식으로 요청(request)을 보낸다. 4. server 응답 여부를 확인한다.
  • 11. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 제목 크롤링 HTML을 문자열 형태로 가져와 lxml.fromstring()에 넘긴다 element에 HTML을 파싱한 형태의 요소가 생긴다. 분석에 용이한 형태로 바꿔준다고 생각하면 된다. 주로 쓰는 라이브러리는 BeautifulSoup, lxml 등이 있다. 우리는 lxml을 사용할 것이다.
  • 12. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 제목 크롤링 카카오 카풀과 관련된 첫 번 째 뉴스 제목의 HTML 구조 뉴스 제목에 해당하는 내용에 접근 (CSS 선택자 사용) ✓ 각 요소에 접근하는 방법에 능숙 하려면 HTML 구조를 어느정도 알고 있어야한다. ✓ HTML 구조에 대한 내용은 뒷부분에서 다루겠다.
  • 13. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 요약 본문 크롤링 ✓ 기사 제목이 아닌 본문의 요약된 내용을 수집하려면 CSS 선택자 경로만 바꿔주면 된다. ✓ 다음 뉴스는 비교적 HTML 구조가 깔끔한 편이라서 크롤링하기 쉽다. 뉴스 요약 본문에 해당하는 내용에 접근 (CSS 선택자 사용)
  • 14. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 요약 본문 크롤링
  • 15. 너무 쉽다? 그렇다면, 좀 더 응용해보자. 앞의 슬라이드에서 언급한 웹 크롤링의 정의를 보면, “한 페이지만 머무는 것이 아니라 그 페이지에 링크되어 있는 또 다른 페이지 를 차례대로 방문하고 링크를 따라 웹을 돌아다니는 모습이 마치 거미와 비슷하다고 해서 스파이더라고 부르기도 한다.” 라고 했다.
  • 16. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링 뉴스 기사의 본문을 추출하려면 기존 url에 계속 머무는 것이 아니라, 각 뉴스 기사의 url을 클릭해야함 Click!
  • 17. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링 Page1, Page2, … , Page10 Page1 Page2 Page10… …link link link… link link link… link link link… content content content content content content content content content… … …… 뉴스 기사 본문 <순서> 1. Page url list 생성 2. 각 page url에서 뉴스기사 본문 link url list 생성 및 결합 3. 각 link에서 뉴스 기사 본문 추출
  • 18. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링 여러 페이지의 모든 기사 본문을 가져오고 싶다. 거미처럼 움직여보자! https://search.daum.net/search?w=news&DA=PGD&enc=utf8&cluster=y&cluster_page=1&q=%EC% B9%B4%EC%B9%B4%EC%98%A4%EC%B9%B4%ED%92%80&p=1 https://search.daum.net/search?w=news&DA=PGD&enc=utf8&cluster=y&cluster_page=1&q=%EC% B9%B4%EC%B9%B4%EC%98%A4%EC%B9%B4%ED%92%80&p=2 https://search.daum.net/search?w=news&DA=PGD&enc=utf8&cluster=y&cluster_page=1&q=%EC% B9%B4%EC%B9%B4%EC%98%A4%EC%B9%B4%ED%92%80&p=100 각 페이지 별로 url은 일정한 패턴을 가지고 있다.
  • 19. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링 페이지에서 뉴스 기사로 이동하는 링크에 접근해야 한다. 각 언론사의 웹페이지 마다 HTML 형식이 다름으로 다음 뉴스에 접근해야 함 1 page에서 각 뉴스기사로 이동하는 링크
  • 20. Web Crawling 실습 – 정적 크롤링 다음 뉴스 ‘카카오 카풀’ 관련 뉴스 본문 크롤링 첫 번 째 페이지의 첫 번 째 뉴스 기사에 해당하는 웹페이지 및 HTML 구조 뉴스 기사 본문에 접근하는 css 선택자를 지정한 후 for 문을 활용해 코드를 일반화 시킴
  • 21. HTML (=Hyper Text Markup Language): 웹 페이지를 만드는데 널리 쓰이는 마크업 언어 HTML 다음 뉴스 웹페이지의 HTML 구조 ▪ 모든 문서는 <html>로 시작하여 </html>로 끝난다. ▪ <html> 아래에는 <head>와 <body>가 있다. ▪ <body>의 하위에는 <div>가 있다. ▪ 모든 노드는 태그로 감싸여 있는데, 美, 무역협상중 ~ 인상이라는 내용은 <h3> ~ </h3>로 감싸져 있다. 즉, 내용 시작과 종료 시에 태그를 쓴 다. ▪ 태그 이름에는 head, title, div, h1, h2, h3 등이 있다. ▪ 노드는 내용과는 별개로 속성(attribute)를 갖는다. 속성은 HTML 요소 에 대한 추가적인 정보를 제공하는데 사용된다. ▪ 속성이름 = ‘값’ 형태로 나타낸다. ▪ <a>라는 태그에 href 속성에 뉴스 기사로 이동하는 url 링크가 담겨져 있다. ▪ 우리는 뉴스 기사 링크에 접근하기 위해 .attrib['href’] 를 사용했었다. 크롤링에 날개를 달아줘!
  • 22. HTML Parsing HTML에서 특정 부분을 추출하는 방식 CSS selector ① HTML 문서의 서식을 지정하기 위해서 사용됨 ② 짧고 간단하게 특정 부분을 추출할 수 있음 Xpath ① 직접 노드로 접근하는 경로(path)를 지정함 ② 복잡한 경로도 찾아갈 수 있음
  • 23. CSS selector (1) class 이름으로 선택 → . 사용 -> 태그가 <div> 인 엘리먼트 중에서 class = ‘div,news_text2018’ -> 점(.) 앞에 특정 태그를 넘겨주면, 해당 태그에 대해서만 선택한다. -> div.news_text2018 (2) id 이름으로 선택 → # 사용 -> 태그가 <id> 인 엘리먼트 중에서 id = ‘article_txt’ -> id로 엘리먼트를 선택하면 #을 사용한다. -> div#article_txt
  • 24. Xpath 오른쪽 마우스 클릭 Copy Copy XPath 손쉽게 Xpath 절대경로를 알아낼 수 있음 -> element.xpath(//*[@id="article_txt"]) 일반화된 크롤러를 만들기 위해서는 Xpath에 대해서 이해하는 것이 도움이 됨 a 라는 노드에 접근하고 싶다 절대경로: /body/p/a 상대경로: //a
  • 25. Web Crawling의 방식 1. 정적 크롤링 • 어느 상황에서나 같은 주소에서 변하지 않는 데이터를 기대할 수 있는 경우 • 수집 대상에 한계가 있으나 속도가 빠르다. • 사용 모듈 – requests 2. 동적 크롤링 • 입력, 클릭 등 실제 브라우저에서 행하는 행동 들을 해야만 데이터를 수집할 수 있는 경우 (매크로와 매우 흡사) • 수집 대상에 한계가 없으나 속도가 느리다 • 사용 모듈 – Selenium • 사용 예시 * 두 가지 방법을 혼용 해서 쓰기도 함
  • 26. Web Crawling 실습 – 동적 크롤링 selenium을 활용한 youtube 크롤링 ① Selenium은 웹 브라우저를 제어해주는 라이브러리 ② 크롤링이 어려운 사이트인 경우 Selenium 을 사용해 무적의 크롤러를 만들 수 있음 ③ Selenium을 사용해 실제 웹 사이트를 제어하여 (like 매크로) 쉽게 크롤링할 수 있음 ④ 실제 웹 브라우저를 띄우기 때문에 속도가 느리다는 단점이 있음 먼저, 크롬 웹드라이버를 다운로드 받는다. 링크 : 크롬 웹드라이버
  • 27. Web Crawling 실습 – 동적 크롤링 selenium을 활용한 youtube 크롤링 작업 경로에 chromedriver.exe 를 넣어준다!운영 체제에 맞는 chromedriver를 설치한다.
  • 28. Web Crawling 실습 – 동적 크롤링 selenium을 활용한 youtube 크롤링 Selenium library를 설치하고 크롬 브라우저를 연다. 빈 브라우저가 열린다 브라우저를 띄우는 시간이 있음으로 3초 정도 쉬어준다. Selenium을 통해 크롤러를 만들 때는 모든 코드가 유기적으로 움직여야 함으로 적절하게 시간을 제어해줘야 한다.
  • 29. Web Crawling 실습 – 동적 크롤링 selenium을 활용한 youtube 크롤링
  • 30. Web Crawling 실습 – 동적 크롤링 selenium을 활용한 youtube 크롤링 Css 선택자를 못찾겠다 싶으면 Copy Selector 방법을 써도 무관 크롬 브라우저에서 ‘벤쯔’가 입력되는 것을 볼 수 있음
  • 31. Web Crawling 실습 – 동적 크롤링 selenium을 활용한 youtube 크롤링 Copy Selector Copy Selector
  • 32. Web Crawling 실습 – 동적 크롤링 selenium을 활용한 youtube 크롤링 Title 이라는 속성에 제목 text가 존재함 불필요한 데이터가 일부 수집되긴 했지만, 우리가 필요한 데이터는 수집되었다. 필요한 데이터만 수집하려면, Xpath를 이용해 정교하게 접근하면 된다. (정교한 코드는 첨부파일로 제공 ^^ 직접 한번 해보세요)
  • 33. 텍스트 마이닝 * TDM (= Term document matrix) – 단어 문서 행렬 : 문서 별로 등장한 단어의 빈도를 표(행렬) 형태로 나타낸 것 → 자연어 텍스트를 컴퓨터가 인식할 수 있는 정형 데이터로 변환해줌 “오늘은 김치와 소고기를 먹어보겠습니다.” “내일은 소고기 말고 참치를 먹어보겠습니다.” 오늘 김치 소고기 먹다 내일 소고기 참치 먹다 Tokenizing 오늘 김치 소고기 먹다 내일 소고기 참치 먹다 TDM 오늘 김치 소고기 내일 참치 먹다 1 1 1 0 0 1 0 0 1 1 1 1 한국어 토큰화에 사용되는 라이브러리들 → Konlpy, Twitter, Worin, khaiii
  • 34. TDM * TDM (= Term document matrix) – 단어 문서 행렬 : 문서 별로 등장한 단어의 빈도를 표(행렬) 형태로 나타낸 것 → 자연어 텍스트를 컴퓨터가 인식할 수 있는 정형 데이터로 변환해줌 오늘 김치 소고기 먹다 내일 소고기 참치 먹다 TDM 오늘 김치 소고기 내일 참치 먹다 1 1 1 0 0 1 0 0 1 1 1 1 1. 열의 개수 = 모든 문서에서 사용된 단어의 고유 값(두 문서 에서 겹치지 않는 단어는 총 6개임) 2. 자연어에서 사용되는 단어의 수는 매우 많다. 하지만, 하나 의 문서에서 사용되는 단어의 수는 제한적임 따라서 TDM 의 대부분의 칸의 값은 0이 됨 (희소 행렬) 3. 따라서 TDM에 여러 기법을 적용하면 분석이 어렵다. 이를 해결하기 위해 여러가지 방법을 사용함 4. 열합계를 구하면 문서에서 등장한 각 단어 별 빈도 수를 알 수 있다.
  • 35. Tf-idf Tf-idf (term frequency – inverse document frequency) ▪ 단순 빈도수를 나타내는 TDM은 성능이 좋지 않다. TDM에 tf-idf 가중치를 적용하면 성능을 높일 수 있음 ▪ tf-idf 는 단어가 특정 문서에 얼마나 중요한지 나타내는 가중치 임 ▪ 모든 문서에 등장하는 단어는 가중치가 낮음 (ex. 나는, 너는, 우리는, 요리를) ▪ 특정 문서에만 등장하는 단어는 가중치가 높음 (ex. 마라탕, 탕수육, 파프리카 소스) ▪ 한글의 경우 “나는” 이라는 단어는 거의 모든 문서에 등장하기 때문에 낮은 가중치를 받아 분석에서 제외될 수 있음 가중치 ➔ 분모가 커진다 = 단어 x를 포함하는 문서의 수가 많아진다
  • 36. 텍스트 마이닝 개요 Web Crawling DataBase Text Cleansing Tokenizing TDM Word Embedding Modeling 데이터 수집 데이터 저장 데이터 클린징 (불용어, 특수문자 제거) 명사 추출 컴퓨터가 인식할 수 있는 형태로 변환 원하는 과업 진행
  • 37. 감정분석 데이터 불러오기 - 아마존 제품 리뷰 TDM (출처 : UCI 머신러닝 리포지토리 - Sentiment Labelled Sentences - amazon_cells_labelled.txt) Column1 : 아마존 제품에 대한 리뷰 Column2 : 각 리뷰가 긍정 or 부정 (0 or 1) 인지 텍스트 데이터가 수집되고 지도학습을 할 수 있도록 labeling이 완료된 상태의 데이터 ✓ 자연어 데이터 (비정형 데이터)를 컴 퓨터가 인식할 수 있도록 정형 데이터 로 바꿔줘야 한다. ✓ 정형 데이터로 변환하는 예시는 앞에 서 TDM이 있다. ✓ TDM에 tf-idf 가중치를 적용한 것도 자연어를 정형 데이터로 바꾸는 방법 중 하나이다.
  • 38. 감정분석 (지도학습) M O D E L Logistic Regression Deep Neural Network 등등.. → 학습을 통해 모델 생성 TDM Label 부정(0) or 긍정(1) [이진 분류]